如何定义一个字段&在SQL中的Select Query中进行分组

时间:2017-03-29 20:21:08

标签: sql-server

目前有一个包含状态类型的列和一个包含日期的单独列。我想要做的是为每种状态类型创建新列。使用case when语句创建了列名,但不能按那些语句进行分组。

目前,该表推出了以下内容:

Reference |   Status    | Date
    ----- | ----------- | -----
        1 | Approve     | 1/1/2017
        1 | In Progress | 1/2/2017
        2 | Approve     | 1/1/2017
        2 | In Progress | 1/2/2017
        2 | Close       | 1/3/2017

想采取这个并做出:

Reference | Approve  | In Progress | Close
--------- | -------- | ----------- | -----
        1 | 1/1/2017 | 1/2/2017    | 
        2 | 1/1/2017 | 1/2/2017    | 1/3/2017

有很多其他选择,并且意图是自动导出到excel / run,所以试图避免临时表。

我不知道这种情况何时适当,但我很难找到更好的解决方案。

2 个答案:

答案 0 :(得分:0)

这样的事情应该基于你提供的表格(我还处理空值以获得你需要的输出): -

ShopSalesController

答案 1 :(得分:0)

您可以在sql server中使用pivot

select * from #yourStatus
pivot( max(date) for [Status] in ([Approve], [In Progress],[Close])) p

你的桌子:

create table #yourStatus (Reference int, Status varchar(20), Date date)

insert into #yourstatus (
Reference   ,   Status  ,   Date ) values
 ( 1  ,'Approve','1/1/2017')
,( 1  ,'In Progress','1/2/2017')
,( 2  ,'Approve','1/1/2017')
,( 2  ,'In Progress','1/2/2017')
,( 2  ,'Close','1/3/2017')