MSSQL如何选择多行到列?

时间:2017-06-22 08:01:26

标签: sql

我有一个包含以下3列的表结构:

Date,MessageType,MessageText

Row数据如下所示:

2017-06-22 | "Public" | "Test Message"
2017-06-22 | "Private" | "Test Message 2"
2017-06-22 | "Semi Private" | "Test Message 3"

我希望能够输出到以下结构:

DATE | "Public" | "Private" | "Semi Private"
2017-06-22 | "Test Message" | "Test Message 2" | "Test Message 3"

因此,我可以按日期进行分组,并使不同的MessageType成为列标题,每个日期都包含MessageText。

假设每个Date只有一种MessageType。

我正在使用MS SQL。

非常感谢提前!

1 个答案:

答案 0 :(得分:2)

Date上的简单数据透视查询可能正是您要查找的内容。我说“可能”,因为我的答案假设每个日期最多只有三种消息类型中的一种。

SELECT
    Date,
    MAX(CASE WHEN MessageType = 'Public'  THEN MessageText END) AS [Public],
    MAX(CASE WHEN MessageType = 'Private' THEN MessageText END) AS [Private],
    MAX(CASE WHEN MessageType = 'Semi Private'
             THEN MessageText END) AS [Semi Private]
FROM yourTable
GROUP BY Date

同样,如果这对您不起作用,请编辑您的问题并显示失败的数据。