2017-03-09 102 views
1

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

我一直在尝试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

两者。

您可以使用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; 
+0

感谢GurV。你的答案几乎解决了它。总列将所有值相加,User1总共为11。总数应该是7. –

+0

@OscarDuran - 这是因为它也增加了星期数据。你可以调整它以适应你的需求 – GurV

+0

我对此并不是很有经验,我已经尝试了一些变化,但目前为止还没有完全正确。你能够发布任何遗漏的东西,这样就可以显示正确的总数吗? –