2016-11-23 2 views
1

私はStaffAllテーブルが行であり、チェックテーブルが列であるように2つのテーブルを結合しようとしています。相続人は、データの要約:これは私がPIVOT結合に余分な列を追加する

People_Checks 
------------------------------ 
| PersonID | LastName | CONR | CONR_Data | DBSC | DBSC_Data | 
--------------------------------------------------------------------------- 
| 10001 | Smith | 01/08/14 | "A String" | 01/08/14 | BC5645646 | 
---------------------------------------------------------------------------- 
| 10002 | Collins | 01/08/14 | "Text abc" | NULL | "NULL  | 
--------------------------------------------------------------------------- 
| 10003 | Brown | NULL |  NULL | 01/08/14 | KG1215446 | 
--------------------------------------------------------------------------- 

を生成しようとしているものです

StaffAll 
----------------------------------- 
| PeronsID | FirstName | LastName | 
----------------------------------- 
| 10001 | James | Smith | 
----------------------------------- 
| 10002 | David | Collins | 
----------------------------------- 
| 10003 | Sarah | Brown | 
----------------------------------- 

Checks 
------------------------------ 
| CheckID | PersonID | CheckTypeID | CheckDate | CheckExpiry | CheckData | 
---------------------------------------------------------------------------- 
| 100001 | 10001 |  CONR | 01/08/14 | 01/08/14 | "A string" | 
---------------------------------------------------------------------------- 
| 100002 | 10001 |  DBSC | 01/08/14 | 01/08/14 | BC5645646 | 
---------------------------------------------------------------------------- 
| 100003 | 10002 |  CONR | 01/08/14 | 01/08/14 | "Text abc" | 
---------------------------------------------------------------------------- 
| 100004 | 10003 |  DBSC | 01/08/14 | 01/08/14 | KG1215446 | 
---------------------------------------------------------------------------- 

は、私は、各CheckTypeIDの列を作成するために、PIVOTを使用するために管理してきました:

WITH SCSR AS (
    SELECT 
     S.PersonID, 
     S.FirstName, 
     S.LastName, 
     C.CheckDate, 
     C.CheckTypeID AS CheckTypeID 
    FROM 
     dbo.StaffAll S 
    INNER JOIN dbo.Checks C 
     ON S.PersonID = C.PersonID 
) 

SELECT * 
FROM 
    SCSR 
    PIVOT (MAX([CheckDate]) FOR [CheckTypeID] IN ([APPF], [CONR], [CONS], [CPCS], [DBSC], [DISQ], [EMPH], [FAID], [IDEN], [LIST],[MEDI],[MNDQ],[OFFR],[OFFS],[POLI],[PROH],[QUAL],[REF1],[REF2],[RISK],[SRTC],[WORK])) TT; 

Checksテーブルから余分なPIVOT列を追加する方法はありますか。 ChecksのCheckData列も含めたいと思います。

答えて

1

条件付き集計を使用します。この場合、サブクエリまたはcross apply

select s.personid, s.lastname, c.* 
from staffall s cross apply 
    (select max(case when c.CheckTypeID = 'CONR' then checkdate end) as CONR, 
      max(case when c.CheckTypeID = 'CONR' then checkdata end) as CONR_data, 
      max(case when c.CheckTypeID = 'DBSC' then checkdate end) as DBSC, 
      max(case when c.CheckTypeID = 'DBSC' then checkdata end) as DBSC_data 
     from checks c 
     where c.personid = s.personid 
    ) c; 
関連する問題