我在进行选择查询时需要调整一些数据。我正在使用SQL Server 2014.这是原始数据的格式。
StudentID | DocumentType | PersonID
---------- ------------- --------
00001 DocA 2222
00001 DocB 2222
00002 DocB 2222
00002 DocA 3333
00003 DocA 4444
我希望它显示为......
StudentID | DocumentTypeAPersonID | DocumentTypeBPersonID
--------- --------------------- -----------------------
00001 2222 2222
00002 3333 2222
00003 4444 NULL
有时学生会同时拥有两种文件类型。有时他们只会有一个。不确定“缺失”文档类型是否会在该字段中显示为NULL或只是空白。
答案 0 :(得分:2)
这种方式可能会为您节省一些代码
SELECT StudentID,
DocumentTypeAPersonID = MAX(CASE WHEN DocumentType ='DocA' THEN PersonID END),
DocumentTypeBPersonID = MAX(CASE WHEN DocumentType ='DocB' THEN PersonID END)
FROM MyTable
GROUP BY StudentID
答案 1 :(得分:0)
你走了。
SELECT StudentID, DocA, DocB FROM
(
SELECT StudentID, DocumentType, PersonID
FROM myTable
) t
pivot
(
MAX(PersonID)
FOR DocumentType IN (DocA, DocB)
) p
这是一个静态数据透视表示您必须手动输入要旋转的列。例如,如果您还有DocC,那么就这样做......
SELECT StudentID, DocA, DocB, DocC FROM
(
SELECT StudentID, DocumentType, PersonID
FROM myTable
) t
pivot
(
MAX(PersonID)
FOR DocumentType IN (DocA, DocB, DocC)
) p