Sql server SQl Server-2个具有不同值的相等列

Sql server SQl Server-2个具有不同值的相等列,sql-server,Sql Server,我有这张桌子: ID | Status | Date ----+----------+-------------- 1 | 1 | 01-01-2017 2 | 1 | 26-04-2016 2 | 4 | 20-10-2016 3 | 1 | 05-11-2015 3 | 2 | 20-03-2016 4 | 4 | 06-06

我有这张桌子:

ID  | Status   | Date  
----+----------+--------------
1   |    1     |   01-01-2017    
2   |    1     |   26-04-2016   
2   |    4     |   20-10-2016  
3   |    1     |   05-11-2015  
3   |    2     |   20-03-2016  
4   |    4     |   06-06-2015  
5   |    1     |   10-04-2017  
5   |    3     |   21-12-2016  
5   |    2     |   25-02-2013  
5   |    4     |   11-03-2014  
我想要的结果是:

ID  |  Status1 |  Status2 | Status3  |  Status4 |  Date  
----+----------+----------+----------+----------+------------
1   |    1     |          |          |          |  01 01 2017  
2   |    1     |          |          |          |  26 04 2016   
2   |          |          |          |    4     |  20 10 2016  
3   |    1     |          |          |          |  05 11 2015  
3   |          |    2     |          |          |  20 03 2016  
4   |          |          |          |    4     |  06 06 2015  
5   |    1     |          |          |          |  10 04 2017  
5   |          |          |    3     |          |  21 12 2016  
5   |          |    2     |          |          |  25 02 2013  
5   |          |          |          |    4     |  11 03 2014  

如何进行查询?

您可以使用
CASE
语句来实现这一点。请注意,我将日期重命名为sdate,因为日期是一个


如果我们使用Group By,则不需要临时/永久表。看到我的答案了吗?对不起,我不知道你的意思?您是指
CREATE
table语句吗?用户可以在sqlfiddle或rextester上试用。此外,我不明白为什么需要
分组依据或任何聚合?哎呀,你说得对,是的,我现在看到我的错误了。删除了我的答案。欢迎使用StackOverflow:如果您发布代码、XML或数据示例,请在文本编辑器中突出显示这些行,然后单击编辑器工具栏上的“代码示例”按钮(
{}
),以很好地格式化和语法突出显示它!
CREATE TABLE myTable (id INT, status INT, [sdate] date)

INSERT INTO myTable VALUES (1, 1, '01-01-2017')
                           ,(2, 1, '04-26-2017')
                           ,(2, 4, '10-20-2016')


    SELECT id
           ,CASE WHEN status = 1 then status else NULL end as status1
           ,CASE WHEN status = 2 then status else NULL end as status2
           ,CASE WHEN status = 3 then status else NULL end as status3
           ,CASE WHEN status = 4 then status else NULL end as status4
           ,sdate
    FROM myTable