使用 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