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

Odpowiedz Nowy wątek
2019-11-08 12:53
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ć?

edytowany 1x, ostatnio: cerrato, 2019-11-08 13:32

Pozostało 580 znaków

2019-11-08 13:23
0

PIVOT

Pozostało 580 znaków

2019-11-08 13:30
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

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
edytowany 1x, ostatnio: _13th_Dragon, 2019-11-08 13:30

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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