![]() |
Datenbank: Firebird • Version: 2.5 • Zugriff über: egal
Group mit 0 Werten - Firebird 2.5
Hallo,
ich möchte die Rechnungsdaten eines Monats Listen
Code:
Das klappt,aber sobald in einem Monat keine Rechnungen bestehen wird auch nichts zurück gegeben.
select EXTRACT(MONTH FROM r.RECHNUNGDAT) as Monat,
Sum(r.Betragnetto) as BetragNetto from rechnung R WHERE EXTRACT(Year FROM r.RECHNUNGDAT)=2019 group by EXTRACT(MONTH FROM r.RECHNUNGDAT) Gibt es eine elegantere Lösung als ein LEFT JOIN auf eine vorgefüllte Monatstabelle? |
AW: Group mit 0 Werten - Firebird 2.5
Eine SQL Procedure mit eine for Schleife von 1 - 12
|
AW: Group mit 0 Werten - Firebird 2.5
![]() Aber vielleicht gibt es ja doch im Firebird schon was Fertiges ala generate_series ![]() |
AW: Group mit 0 Werten - Firebird 2.5
Das Problem hatte ich auch schon einmal. Es ist ganz einfach zu lösen.
Lege Dir eine Tabelle an mit allen Monaten. Dan geht es ganz einfach. Bei mir war das Problem mit leeren Lagerplätzen welche ich auch haben wollte. Hier kannst du sehen wie du den Select dann bauen kannst. Ist der erste Beitrag ganz oben ![]() Es sind aber noch weitere nützliche Tips dort zu sehen. Die anderen Tips sind alle auch nicht schlecht nur der von Holger geht dann am Ende am schnellsten. Bei allen was Firebird betrifft ist Holger der beste den es gibt. Zumindest aus meiner Sicht. Bei Interesse kannst du Dich Mittwochs einwählen dort erklärt er so einiges ![]() |
AW: Group mit 0 Werten - Firebird 2.5
Zitat:
![]() |
AW: Group mit 0 Werten - Firebird 2.5
Für solche Fälle habe ich stored procedure.
Diese liefert mir den Zeitstrahl mit allen Monaten. Als ADATUM_VON, ADATUM_BIS wird ein beliebiger Tag im Monat angegeben. Bsp.:
SQL-Code:
select
JM.YYYYMM, JM.JAHR, JM.MONAT, Sum(R.Betragnetto) as BetragNetto from SP_JJMM(:von, :bis) JM -- von/bin sind ein beliebiger Tag im Monat left join rechnung R on (RECH.RECHNUNGDAT between JM.FIRSTDAY and JM.LASTDAY) group by JM.YYYYMM, JM.JAHR, JM.MONAT
SQL-Code:
create or alter procedure SP_JJMM (
ADATUM_VON date, ADATUM_BIS date) returns ( YYYYMM integer, JAHR integer, MONAT integer, FIRSTDAY date, LASTDAY date) AS declare M INTEGER; declare J INTEGER; declare BM INTEGER; declare BJ INTEGER; begin IF (ADATUM_VON is not NULL) THEN BEGIN J = EXTRACT(YEAR FROM ADATUM_VON); M = EXTRACT(MONTH FROM ADATUM_VON); END ELSE BEGIN J = EXTRACT(YEAR FROM CURRENT_DATE); M = EXTRACT(MONTH FROM CURRENT_DATE); END IF (ADATUM_BIS is not NULL) THEN BEGIN BJ = EXTRACT(YEAR FROM ADATUM_BIS); BM = EXTRACT(MONTH FROM ADATUM_BIS); END ELSE BEGIN BJ = EXTRACT(YEAR FROM CURRENT_DATE); BM = EXTRACT(MONTH FROM CURRENT_DATE); END JAHR = NULL; MONAT = NULL; WHILE (J * 100 + M <= BJ * 100 + BM) DO BEGIN JAHR = J; MONAT = M; YYYYMM = J * 100 + M; FIRSTDAY = J||'-'||M||'-01'; LASTDAY = DATEADD(MONTH, 1, FIRSTDAY); LASTDAY = LASTDAY -1; suspend; M = M + 1; IF (M > 12) THEN BEGIN M = 1; J = J + 1; end END end |
AW: Group mit 0 Werten - Firebird 2.5
Vielen Dank für die Tipps. Ich werde es mit Hilfe der SP umsetzen!
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:53 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz