使用SQL Select Query

时间:2016-09-23 15:28:27

标签: sql sql-server pivot sql-server-2014

我在进行选择查询时需要调整一些数据。我正在使用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或只是空白。

2 个答案:

答案 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