[mssql] Zapytanie zestawiające w jednej tabeli dane z róznych okresów.

0

Walczę z jednym zapytaniem i nie mogę sobie z tym poradzić. Załóżmy że jest sobie tabela, powiedzmy 'sprzedaż':

+---------------------------+-----------+-----------+
| Data			            |	Nazwa	| Ilosc		|
+---------------------------+-----------+-----------+
| 2019-11-06 00:00:00.000	| Towar 1 	|   10    	|
| 2019-11-03 00:00:00.000	| Towar 2 	|    2    	|
| 2019-10-29 00:00:00.000	| Towar 1 	|   24    	|
| 2019-10-27 00:00:00.000	| Towar 2 	|    8    	|
| 2019-10-26 00:00:00.000	| Towar 3 	|    5    	|
| 2019-10-21 00:00:00.000	| Towar 1 	|    7    	|
| 2019-10-18 00:00:00.000	| Towar 2 	|   19     	|
| 2019-10-14 00:00:00.000	| Towar 1 	|    4     	|
| 2019-10-12 00:00:00.000	| Towar 2 	|   12     	|
| 2019-10-07 00:00:00.000	| Towar 1 	|   26     	|
| 2019-10-05 00:00:00.000	| Towar 2 	|   18     	|
| 2019-10-04 00:00:00.000	| Towar 3 	|    9     	|
+---------------------------+-----------+-----------+

Potrzebuję z tabeli wyciągnąć dane nt. sprzedaży np. w poprzednim tygodniu, tutaj sobie radzę:

SELECT Nazwa, SUM(Ilosc) FROM Spredaz
WHERE datepart(wk, Data) = datepart(wk, GETDATE()) - 1 
GROUP BY Nazwa

W efekcie dostaję:

+-----------+-----------+
|	Nazwa	| Ilosc		|
+-----------+-----------+
| Towar 1 	|   10    	|
| Towar 2 	|    2    	|
+-----------+-----------+

Czyli OK. Problem mam jak uzyskać efekt w którym w jednej tabeli w osobnych kolumnach będę miał Ilość sprzedanych towarów w tygodniu -1, tygodniu -2, tygodniu -3 itd. Czyli chciałbym uzyskać taki efekt:

+-----------+-----------+-----------+-----------+
|	Nazwa	| Tydz -1	| Tydz -2	| Tydz -3	|
+-----------+-----------+-----------+-----------+
| Towar 1 	|    10    	|    2    	|  NULL    	|
| Towar 2 	|    24    	|    8    	|     5    	|
| Towar 3 	|  NULL    	|    7    	|    19    	|
+-----------+-----------+-----------+-----------+

Powiem szczerze, że utknąłem straszliwie. Jak się za to zabrać?

0

PIVOT

0
SELECT Nazwa, 
ifnull(SUM(if(datepart(wk, GETDATE())-datepart(wk, Data)=1,Ilosc,0)),0) wk1
ifnull(SUM(if(datepart(wk, GETDATE())-datepart(wk, Data)=2,Ilosc,0)),0) wk2 
ifnull(SUM(if(datepart(wk, GETDATE())-datepart(wk, Data)=3,Ilosc,0)),0) wk3
FROM Spredaz
WHERE datepart(wk, GETDATE())-datepart(wk, Data) in (1,2,3)
GROUP BY Nazwa

1 użytkowników online, w tym zalogowanych: 0, gości: 1