2017-06-22 61 views
0

我有以下3列的表结构:MSSQL如何选择多行到列?

日期,消息类型,MessageText中

行数据如下:

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成为列标题,机智h每日期的MessageText。

假设每个日期只有一种类型的MessageType。

我正在使用MS SQL。

非常感谢提前!

回答

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 

再次,如果这不适合你,那么编辑你的问题,并显示数据失败的地方。

+0

那我不知道MessageType是什么的情况呢?是否有更通用的查询可以编写,以便它自动生成基于不同MessageType的列? – TheBear

+0

是的,你可以使用动态SQL。这将是更多的工作,也会使我的答案无效(我只回答,因为它似乎你不会需要动态SQL)。 –