首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用SQL Select查询透视数据

使用SQL Select查询透视数据
EN

Stack Overflow用户
提问于 2016-09-23 23:28:27
回答 2查看 68关注 0票数 1

在执行select查询时,我需要透视一些数据。我使用的是SQL Server 2014。以下是原始数据的格式。

代码语言:javascript
复制
    StudentID  | DocumentType  | PersonID
    ----------   -------------   --------
    00001           DocA           2222
    00001           DocB           2222
    00002           DocB           2222
    00002           DocA           3333
    00003           DocA           4444

我想让它看起来像这样。

代码语言:javascript
复制
    StudentID |  DocumentTypeAPersonID | DocumentTypeBPersonID
    ---------    ---------------------   -----------------------
    00001               2222                     2222
    00002               3333                     2222
    00003               4444                     NULL

有时学生会同时拥有两种文档类型。有时他们只会有一个。不确定“缺少的”文档类型是否会在该字段中显示为NULL或仅为空白。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-24 02:12:19

这种方式可能会节省一些代码

代码语言:javascript
复制
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
票数 2
EN

Stack Overflow用户

发布于 2016-09-24 02:02:42

这就是你要的。

代码语言:javascript
复制
SELECT StudentID, DocA, DocB FROM 
(
    SELECT StudentID, DocumentType, PersonID
    FROM myTable
) t
pivot
(
    MAX(PersonID)
    FOR DocumentType IN (DocA, DocB)
) p

这是静态透视表,这意味着您必须手动输入要透视表的列。例如,如果你也有一个DocC,那么只需这样做...

代码语言:javascript
复制
SELECT StudentID, DocA, DocB, DocC FROM 
(
    SELECT StudentID, DocumentType, PersonID
    FROM myTable
) t
pivot
(
    MAX(PersonID)
    FOR DocumentType IN (DocA, DocB, DocC)
) p
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39664482

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档