使用 SQL Select 查询透视数据
Pivot Data Using a SQL Select Query
我需要在执行 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
有时学生会同时拥有两种文档类型。有时他们只会有一个。不确定 "missing" 文档类型是否会在该字段中显示为 NULL 或只是空白。
给你。
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
这种方式可能会为您节省一些代码
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
我需要在执行 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
有时学生会同时拥有两种文档类型。有时他们只会有一个。不确定 "missing" 文档类型是否会在该字段中显示为 NULL 或只是空白。
给你。
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
这种方式可能会为您节省一些代码
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