2017-10-13 66 views
1
週一天

我有大約時間內登錄反對的任務,像這樣的數據表:表1 組數據按周和transpone通過

| TaskID | DateRec | Hours | 
| 1  | 2017-10-08 | 3.5 | 
| 1  | 2017-10-09 | 1  | 
| 2  | 2017-10-09 | 5  | 
| 1  | 2017-10-17 | 2.4 | 
| 2  | 2017-10-17 | 2  | 
| 5  | 2017-10-18 | 0.5 | 
| 5  | 2017-10-19 | 2  | 

的TaskID和DateRec的組合始終是唯一的。假設我的工作周從星期天開始,這意味着'2017-10-08'將是第1周的第一天,'2017-10-15'將是第2周的第一天,以此類推。我需要一羣我小時的TaskID和星期,他們已登錄,然後針對每個單獨的周transpone的時間爲七列由上週的一天,從1天到7天,像這樣:

    (10-08) (10-09) (10-10) (10-11) (10-12) (10-13) (10-14) 
(Task 1, Week 1) (h)  (h)  (h)  (h)  (h)  (h)  (h) 
(Task 2, Week 1) (h)  (h)  (h)  (h)  (h)  (h)  (h) 
       (10-15) (10-16) (10-17) (10-18) (10-19) (10-20) (10-21) 
(Task 1, Week 2) (h)  (h)  (h)  (h)  (h)  (h)  (h) 
(Task 2, Week 2) (h)  (h)  (h)  (h)  (h)  (h)  (h) 
... 

使在我的例子那就是:

| TaskID | Week Start Date | Day1 | Day2 | Day3 | Day4 | Day5 | Day6 | Day7 | 
    | 1  | 2017-10-08  | 3.5 | 1 | NULL | NULL | NULL | NULL | NULL | 
    | 2  | 2017-10-08  | NULL | 5 | NULL | NULL | NULL | NULL | NULL | 
    | 1  | 2017-10-15  | NULL | NULL | 2.4 | NULL | NULL | NULL | NULL | 
    | 2  | 2017-10-15  | NULL | NULL | 2 | NULL | NULL | NULL | NULL | 
    | 5  | 2017-10-15  | NULL | NULL | NULL | 0.5 | 2 | NULL | NULL | 

是否有可能做SQL,和究竟如何?注:我使用Microsoft SQL Server 2012

回答

1

Select * 
From (
     Select TaskID 
       ,WeekBeg = DateAdd(DAY,1-DatePart(WEEKDAY,DateRec),DateRec) 
       ,Item = Concat('Day',DatePart(WEEKDAY,DateRec)) 
       ,Hours 
     From YourTable 
    ) A 
Pivot (sum([Hours]) For [Item] in ([Day1],[Day2],[Day3],[Day4],[Day5],[Day6],[Day7])) p 

返回

(不能重新加載圖像... DateRec更名爲WeekBeg

enter image description here

+0

謝謝。這將解決我的問題。你甚至不必使用GROUP BY子句! –

+0

@ B.Sverediuk Nope。在PIVOT中的總和將爲你做。 :) –