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时存在)