2017-06-29 178 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) 

輸出

+-------------+--------------------------+-------------+--------+ 
| 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)