2017-10-13 1 views
1

J'ai une table avec des données sur les heures enregistrées contre des tâches comme ceci: Tableau 1données du groupe par semaine et par semaine transpone jour

| 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  | 

La combinaison de TaskID et DateRec est toujours unique. Supposons que ma semaine de travail commence le dimanche, ce qui signifie que «2017-10-08» serait le premier jour de la semaine 1, et «2017-10-15» serait le premier jour de la deuxième semaine et ainsi de suite. Je dois regrouper mes heures par TaskID et de la semaine, ils ont été connectés, puis pour chaque semaine transpone les heures en sept colonnes par semaine jour, du jour 1 au jour 7, comme si séparé:

    (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) 
... 

Alors que dans mon exemple, il serait:

| 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 | 

Est-il possible de le faire avec SQL, et comment exactement? Note: J'utilise Microsoft SQL Server 2012.

Répondre

1

Exemple

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 

Retours

(ne peut pas recharger l'image ... DateRec a été rebaptisée à WeekBeg)

enter image description here

+0

Merci. Cela résoudra mon problème. Vous n'avez même pas besoin d'utiliser la clause GROUP BY! –

+0

@ B.Sverediuk Non. La somme dans le PIVOT fera cela pour vous. :) –