在执行select查询时,我需要透视一些数据。我使用的是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或仅为空白。
发布于 2016-09-24 02:12:19
这种方式可能会节省一些代码
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发布于 2016-09-24 02:02:42
这就是你要的。
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)
) phttps://stackoverflow.com/questions/39664482
复制相似问题