2017-03-09 104 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

我對此並不是很有經驗,我已經嘗試了一些變化,但目前爲止還沒有完全正確。你能夠發佈任何遺漏的東西,這樣就可以顯示正確的總數嗎? –