Wpis z mikrobloga

Witam Mirki, mam pytanie #programowanie , #sql ,#mssql.
Chciałbym wyfiltrować dane z tabel tak, żeby otrzymać sumę ze sprzedaży z faktur dla listy kontrahentów zdefiniowanych w kluzuli where. I jeżeli jakiś kontrahent w miesiącu zdefiniowanym we where nie miałby żadnej faktury chciałbym aby zostało zwrócone 0. Obecnie zapytanie wygląda tak:
SELECT Kontrahenci.Kod, case when sum(SumaNetto)>0 then sum(SumaNetto) when sum(SumaNetto)=0 then '0' end FROM Kontrahenci left join Faktury ON Kontrahenci.ID=Faktury.Kontrahent Where Kontrahenci.Kod IN('11','22','33','55') and Faktury.Data between '2015-01-01' and '2015-01-31'
no i nie wyświetla mi tych zer ( ͡° ʖ̯ ͡°)
  • 7
Tak jak pisze @maciejg cały case zbędny, wystarczy odpowiednio pogrupować. Coś w rodzaju GROUP BY Kontrahenci.ID, CAST(YEAR(Faktury.Data) AS VARCHAR(4)) + '-' + right('00' + CAST(MONTH(Faktury.Data) AS VARCHAR(2)), 2).
Dodatkowo polecam funkcję ISNULL(SumaNetto, 0) - może też być przydatna.
@JaTuNaChwile: nie masz danych za jakiś miesiąc, to nie ma wiersza. Musisz sztucznie dodać. Jak zrobisz tabele z wierszami 1-12 i kartezjana (każdy z każdym), to już będziesz miał każdego kontrahenta 12 razy. Czyli wszystkie miesiące. Wtedy left z fakturami i suma z grupowaniem.