abfrage per monat

Bremer

Neuer Benutzer
Beiträge
4
Moin ich mache eine Abfrage wie

Code:
SELECT
       SUM ([Verkauf (MW)]) AS '2020'
            
FROM [XXX$Debitor] inner JOIN [Fibu XXX$Debitorenposten] on  Debitorennr_ = cast(Nr_  AS varchar)
WHERE Buchungsdatum BETWEEN '20200101' AND '20201231' AND  Reisendencode = 'PKW XX'
GROUP BY YEAR ([Fibu XXX$Debitorenposten].Buchungsdatum )
, MONTH ([Fibu XXX$Debitorenposten].Buchungsdatum )
ORDER BY MONTH ([Fibu XXX$Debitorenposten].Buchungsdatum ) ASC;

Dann bekomme ich folgendes zurück


2020

2052,17
2996,69
1895,97
768,68


Richtig wäre aber:


2020

2052,17
2996,69
0,00
1895,97
768,68

Wie bekomme ich das hin das wann keine Werten da sind 0,00 zurückgegeben wird?

Vielen Dank für eure Hilfe im Voraus
 
Werbung:
In Ermangelung von Tabellenstruktur und Daten hab ich mal improvisiert:

Code:
test=*# select * from bremer ;
   datum    | umsatz
------------+--------
 2020-01-01 |     10
 2020-02-01 |     10
 2020-04-01 |     30
(3 rows)

test=*# select m.*, sum(umsatz) from bremer right join (select * from generate_series(1,5)m )m on extract(month from datum)=m.m group by m.m, extract(month from datum) order by m;
 m | sum
---+-----
 1 |  10
 2 |  10
 3 |   
 4 |  30
 5 |   
(5 rows)

Wenn für einzelne Monate keine Umsätze da sind, Du aber diese dennoch mit NULL sehen willst, mußt Du diese als irgendwie erzeugen. Dazu verwende ich in PostgreSQL immer gerne generate_series().
 
Vielen Dank, leider habe ich MS SQL und soweit ich weiß gibt es da keine generate_series()
Noch jemand ein Idee?
 
In MSSQL kannst du dir entweder eine Tabelle mit Perioden anlegen oder über WITH für den Select erzeugen, in etwa so:
Code:
WITH Perioden(Jahr,Monat) AS (
   SELECT   2020,1
   UNION ALL
   SELECT   Jahr,Monat + 1
   FROM   Perioden
   WHERE   Monat <= 11
   )
SELECT   *
FROM   Perioden
Darauf joinst du dann deine Umsätze etc.
 
fehlt da ein RECURSIVE?

Code:
test=*# WITH recursive perioden(Jahr,Monat) AS (
   SELECT   2020,1
   UNION ALL
   SELECT   Jahr,Monat + 1
   FROM   Perioden
   WHERE   Monat <= 11
   )
SELECT   *
FROM   perioden;
 jahr | monat
------+-------
 2020 |     1
 2020 |     2
 2020 |     3
 2020 |     4
 2020 |     5
 2020 |     6
 2020 |     7
 2020 |     8
 2020 |     9
 2020 |    10
 2020 |    11
 2020 |    12
(12 rows)

test=*#
 
RECURSIVE ist zwar ein reserviertes Schlüsselwort aber ich brauchte es noch nie, an der Stelle mag er das (zumindest bis MSSQL 2014) auch nicht. WITH läuft auch so rekursiv.
 
Werbung:
Zurück
Oben