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

[mssql] Zapytanie zestawiające w jednej tabeli dane z róznych okresów.
S3
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 25
0

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

Kopiuj
+---------------------------+-----------+-----------+
| 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ę:

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

W efekcie dostaję:

Kopiuj
+-----------+-----------+
|	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:

Kopiuj
+-----------+-----------+-----------+-----------+
|	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ć?

Marcin.Miga
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2794
0

PIVOT

_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
0
Kopiuj
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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.