SQL SERVER PIVOT 2014

SQL SERVER PIVOT 2014,sql,pivot,sql-server-2014,Sql,Pivot,Sql Server 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

我有以下查询,返回的结果低于输出

 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 |
+-------------+--------------------------+-------------+--------+
我想使用Pivot来实现列为行和行为列。我的输出应该是这样的

ClnUsmleCertificationDate   ClnUsmleStep1EverApplied    ClnUsmleStep1MaxAttempt ClnUsmleStep1Best   ClnUsmleStep1Date   ClnUsmleStep1Passed ClnUsmleCKMaxAttempt    ClnUsmleCKBest  ClnUsmleCKDate  ClnUsmleCKPassed    ClnUsmleCSMaxAttempt    ClnUsmleCSBest  ClnUsmleCSDate  ClnUsmleCSPassed    StudentUSMLEConsentRelease  UsmleID UsmleRefCode    UsmleCertDate   UsmleCertTranscriptDate UsmleTranscriptRcvdDate
FieldValue应作为这些列中的值

我无法做到这一点。请帮帮我


谢谢

这是一个基于数据的透视操作示例。您可以开始处理它并将其集成到查询中

为了便于测试,我创建了一个保存数据的表变量

--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命令:

--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
下面是这个命令的结果(因为有很多列,我在几列之后剪切了屏幕截图):

请注意,在数据透视表中,您将有一些
null
值,因为并非所有列都存在(例如
ClnUsmleCSPassed
仅在syStudentID=1243时存在)