2017-06-29 25 views
-1

以下の出力を返す次のクエリがあります。SQL Server PIVOT 2014

SELECT 
     SYUSER.FieldValue, DICT.Descrip, SYUSER.syStudentID, 
     ROW_NUMBER() OVER (PARTITION BY SYUSER.syStudentID ORDER BY SYUSER.syStudentID) AS RowNum 
    FROM 
     SyUserValues(NOLOCK) SYUSER 
     INNER JOIN SyUserDict DICT ON SYUSER.syUserDictID = DICT.syUserDictID 
    WHERE 
     SYUSER.syUserDictID IN (46,53,54,55,56,57,58,59,60,61,62,63,64,65,74,89,90,91,92,93) 

私は列と行と行として列を達成するためにピボットを使用したいOUTPUT

+-------------+--------------------------+-------------+--------+ 
| FieldValue |   Descrip   | syStudentID | RowNum | 
+-------------+--------------------------+-------------+--------+ 
| 1   | ClnUsmleStep1EverApplied |  1243 |  1 | 
| 1   | ClnUsmleStep1MaxAttempt |  1243 |  2 | 
| 235   | ClnUsmleStep1Best  |  1243 |  3 | 
| 8/5/2009 | ClnUsmleStep1Date  |  1243 |  4 | 
| 1   | ClnUsmleStep1Passed  |  1243 |  5 | 
| 1   | ClnUsmleCKMaxAttempt  |  1243 |  6 | 
| 233   | ClnUsmleCKBest   |  1243 |  7 | 
| 6/4/2011 | ClnUsmleCKDate   |  1243 |  8 | 
| 1   | ClnUsmleCKPassed   |  1243 |  9 | 
| 1   | ClnUsmleCSMaxAttempt  |  1243 |  10 | 
| P   | ClnUsmleCSBest   |  1243 |  11 | 
| 1/22/2011 | ClnUsmleCSDate   |  1243 |  12 | 
| 1   | ClnUsmleCSPassed   |  1243 |  13 | 
| 7865975  | UsmleID     |  1243 |  14 | 
| S0000086640 | UsmleRefCode    |  1243 |  15 | 
| 3/29/2011 | UsmleCertDate   |  1243 |  16 | 
| 1/25/2012 | UsmleCertTranscriptDate |  1243 |  17 | 
| 1/27/2012 | UsmleTranscriptRcvdDate |  1243 |  18 | 
| 1   | ClnUsmleStep1EverApplied |  1249 |  1 | 
| 1   | ClnUsmleStep1MaxAttempt |  1249 |  2 | 
| 201   | ClnUsmleStep1Best  |  1249 |  3 | 
| 6/29/2013 | ClnUsmleStep1Date  |  1249 |  4 | 
| 1   | ClnUsmleStep1Passed  |  1249 |  5 | 
| 1   | ClnUsmleCKMaxAttempt  |  1249 |  6 | 
| 219   | ClnUsmleCKBest   |  1249 |  7 | 
| 11/23/2016 | ClnUsmleCKDate   |  1249 |  8 | 
| 1   | ClnUsmleCKPassed   |  1249 |  9 | 
| 2   | ClnUsmleCSMaxAttempt  |  1249 |  10 | 
| P   | ClnUsmleCSBest   |  1249 |  11 | 
| 3/16/2017 | ClnUsmleCSDate   |  1249 |  12 | 
+-------------+--------------------------+-------------+--------+ 

。私の出力はこのようにすべきです。

ClnUsmleCertificationDate ClnUsmleStep1EverApplied ClnUsmleStep1MaxAttempt ClnUsmleStep1Best ClnUsmleStep1Date ClnUsmleStep1Passed ClnUsmleCKMaxAttempt ClnUsmleCKBest ClnUsmleCKDate ClnUsmleCKPassed ClnUsmleCSMaxAttempt ClnUsmleCSBest ClnUsmleCSDate ClnUsmleCSPassed StudentUSMLEConsentRelease UsmleID UsmleRefCode UsmleCertDate UsmleCertTranscriptDate UsmleTranscriptRcvdDate 

これらの各列には、FieldValueが値として指定されている必要があります。

私はこれを達成できません。私を助けてください。

ありがとうございました

答えて

0

ここでは、データに基づくピボット操作のサンプルを示します。作業を開始してクエリに統合することができます。

私は簡単なテストのために、データを保持するテーブル変数を作成しました。ここで

--declare table variable with test data 
declare @tmp table(FieldValue nvarchar(100), Descrip nvarchar(100), syStudentID int, RowNum int) 

insert into @tmp select '1'   ,'ClnUsmleStep1EverApplied',1243, 1 
insert into @tmp select '1'   ,'ClnUsmleStep1MaxAttempt' ,1243, 2 
insert into @tmp select '235'  ,'ClnUsmleStep1Best'  ,1243, 3 
insert into @tmp select '8/5/2009' ,'ClnUsmleStep1Date'  ,1243, 4 
insert into @tmp select '1'   ,'ClnUsmleStep1Passed'  ,1243, 5 
insert into @tmp select '1'   ,'ClnUsmleCKMaxAttempt' ,1243, 6 
insert into @tmp select '233'  ,'ClnUsmleCKBest'   ,1243, 7 
insert into @tmp select '6/4/2011' ,'ClnUsmleCKDate'   ,1243, 8 
insert into @tmp select '1'   ,'ClnUsmleCKPassed'  ,1243, 9 
insert into @tmp select '1'   ,'ClnUsmleCSMaxAttempt' ,1243, 10 
insert into @tmp select 'P'   ,'ClnUsmleCSBest'   ,1243, 11 
insert into @tmp select '1/22/2011' ,'ClnUsmleCSDate'   ,1243, 12 
insert into @tmp select '1'   ,'ClnUsmleCSPassed'  ,1243, 13 
insert into @tmp select '7865975' ,'UsmleID'     ,1243, 14 
insert into @tmp select 'S0000086640','UsmleRefCode'   ,1243, 15 
insert into @tmp select '3/29/2011' ,'UsmleCertDate'   ,1243, 16 
insert into @tmp select '1/25/2012' ,'UsmleCertTranscriptDate' ,1243, 17 
insert into @tmp select '1/27/2012' ,'UsmleTranscriptRcvdDate' ,1243, 18 
insert into @tmp select '1'   ,'ClnUsmleStep1EverApplied',1249, 1 
insert into @tmp select '1'   ,'ClnUsmleStep1MaxAttempt' ,1249, 2 
insert into @tmp select '201'  ,'ClnUsmleStep1Best'  ,1249, 3 
insert into @tmp select '6/29/2013' ,'ClnUsmleStep1Date'  ,1249, 4 
insert into @tmp select '1'   ,'ClnUsmleStep1Passed'  ,1249, 5 
insert into @tmp select '1'   ,'ClnUsmleCKMaxAttempt' ,1249, 6 
insert into @tmp select '219'  ,'ClnUsmleCKBest'   ,1249, 7 
insert into @tmp select '11/23/2016' ,'ClnUsmleCKDate'   ,1249, 8 
insert into @tmp select '1'   ,'ClnUsmleCKPassed'  ,1249, 9 
insert into @tmp select '2'   ,'ClnUsmleCSMaxAttempt' ,1249, 10 
insert into @tmp select 'P'   ,'ClnUsmleCSBest'   ,1249, 11 
insert into @tmp select '3/16/2017' ,'ClnUsmleCSDate'   ,1249, 12 

は、テーブル変数を使用して、ピボットコマンドです:ここで

--pivot data on [Descrip] column 
select * from(
    select FieldValue 
    ,Descrip 
    ,syStudentID 
    from @tmp 
) src 
pivot 
(
    max(FieldValue) 
    for Descrip in (
     [ClnUsmleCKBest], 
     [ClnUsmleCKDate], 
     [ClnUsmleCKMaxAttempt], 
     [ClnUsmleCKPassed], 
     [ClnUsmleCSBest], 
     [ClnUsmleCSDate], 
     [ClnUsmleCSMaxAttempt], 
     [ClnUsmleCSPassed], 
     [ClnUsmleStep1Best], 
     [ClnUsmleStep1Date], 
     [ClnUsmleStep1EverApplied], 
     [ClnUsmleStep1MaxAttempt], 
     [ClnUsmleStep1Passed], 
     [UsmleCertDate], 
     [UsmleCertTranscriptDate], 
     [UsmleID], 
     [UsmleRefCode], 
     [UsmleTranscriptRcvdDate] 
    ) 
) piv 

は(私はいくつかの列の後にスクリーンショットを切っ列がたくさんあるので)このコマンドの結果です:

enter image description here

ないすべての列があるために旋回テーブルにあなたには、いくつかのnull値を持つことになりますのでご注意ください存在する(例えば、ClnUsmleCSPassedはsyStudentID = 1243にのみ存在する)