SQL Server Pivot或Unpivot

时间:2017-03-09 17:46:34

标签: sql-server pivot unpivot

我有一个基本上需要转置的表,并添加了一个新的SUM列(DaySum)。换位不包括所有行,但只包括指定的行(从17-01-02到17-01-08),如下面的结果表中所示。

我一直在尝试Pivot和Unpivot的不同变体,但是我将列和值混合在一起。

这是我试图修改的表格:

Date          User1   User2   User3
------------------------------------
17-01-01        1        0       1
Week1           0        1       0
17-01-02        1        0       1
17-01-03        1        0       1
17-01-04        1        1       1
17-01-05        1        0       0
17-01-06        1        0       0
17-01-07        1        0       0
17-01-08        1        1       0
Week2           3        0       2

结果应如下所示:

Name    17-01-02  17-01-03  17-01-04  17-01-05  17-01-06  17-01-07  17-01-08  DaySum  Week2
-------------------------------------------------------------------------------------------
User1       1         1         1         1         1         1         1       7       3
User2       0         0         1         0         0         0         1       2       0
User3       1         1         1         0         0         0         0       3       2

非常感谢您的帮助,谢谢您。

1 个答案:

答案 0 :(得分:1)

两个

您可以使用CROSS APPLY进行透视和聚合以进行旋转。

这样的事情:

select 
    username,
    sum(case when date = '2017-01-01' then val end) [2017-01-01],
    sum(case when date = '2017-01-02' then val end) [2017-01-02],
    sum(case when date = '2017-01-03' then val end) [2017-01-03],
    sum(case when date = '2017-01-04' then val end) [2017-01-04],
    . . .
    sum(val) total
from (
    select t.date, x.username, x.val
    from your_table t
    cross apply (
        values  ('User1', User1),
                ('User2', User2),
                ('User3', User3)
    ) x (username, val)
) t
group by username;