środa, 7 stycznia 2015

Ciekawostka SQL: Sprzedaż wg grup dat, niekoniecznie mających ową sprzedaż

No..., to trzeba potraktować daty... iloczynem kartezjańskim! (widok t1), po to, że jak nie ma daty, to trzeba ją zrobić, by potem dołączyć do niej, nieistniejącą dla niej, sprzedaż (widok t2).
Warto się uczyć SQLka, chłopaki i dziewczyny.
*************
> [author]Jacek P.:[/author]
> Witam,
> mam kwerendę, która wyświetla pewne wartości dla miesięcy w    
> danych latach. Technicznie kwerenda oparta jest o inną kwerendę    
> a ta o tabelę. Nie dla każdego miesiąca mam wartości w tabeli    
> stąd moja kwerenda wynikowa wyświetla tylko niektóre miesiące.    
> Jak zrobić żeby w wyniku mieć wszystkie miesiące począwszy od    
> danej daty, ze stałymi wartościami dla miesięcy, które nie    
> pojawiają się w tabeli?

SQLek:
SELECT t1.[DataRM], t2.[Sprzedaz] FROM
(SELECT DISTINCT FORMAT(r.[data],'yyyy') & '.' &    
FORMAT(m.[data],'mm') AS [DataRM] FROM [Faktura$] r, [Faktura$] m)    
t1
LEFT OUTER JOIN
(SELECT FORMAT([data],'yyyy.mm') AS [DataRM], SUM([wart_net]) AS    
[Sprzedaz] FROM [Faktura$] GROUP BY FORMAT([data],'yyyy.mm')) t2
ON t1.[DataRM]=t2.[DataRM]

Tabelka:
http://afin.net/samples/Data/ODBC/SalesInHTML/Faktura.htm

Wynik:
DataRM    Sprzedaz
2004.01    140
2004.02    41
2004.03    118,4
2004.04    153,9
2004.05    42,6
2004.06    15
2004.07    5
2004.08    3,9
2004.09    13,6
2004.10    5,8
2004.11    4,5
2004.12    11
2005.01    5,2
2005.02    25,5
2005.03    5,5
2005.04    10,4
2005.05    0
2005.06    4,8
2005.07    16,2
2005.08    40,5
2005.09    0
2005.10    0
2005.11    0
2005.12    0

Brak komentarzy:

Prześlij komentarz