AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Group mit 0 Werten - Firebird 2.5

Group mit 0 Werten - Firebird 2.5

Ein Thema von lowmax_5 · begonnen am 18. Jun 2020 · letzter Beitrag vom 19. Jun 2020
Antwort Antwort
lowmax_5

Registriert seit: 9. Mai 2003
Ort: Münster, NRW
257 Beiträge
 
Delphi 11 Alexandria
 
#1

Group mit 0 Werten - Firebird 2.5

  Alt 18. Jun 2020, 21:33
Datenbank: Firebird • Version: 2.5 • Zugriff über: egal
Hallo,

ich möchte die Rechnungsdaten eines Monats Listen

Code:
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)
Das klappt,aber sobald in einem Monat keine Rechnungen bestehen wird auch nichts zurück gegeben.

Gibt es eine elegantere Lösung als ein LEFT JOIN auf eine vorgefüllte Monatstabelle?
  Mit Zitat antworten Zitat
Amanda

Registriert seit: 31. Mär 2019
18 Beiträge
 
#2

AW: Group mit 0 Werten - Firebird 2.5

  Alt 18. Jun 2020, 22:29
Eine SQL Procedure mit eine for Schleife von 1 - 12
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.014 Beiträge
 
Delphi 12 Athens
 
#3

AW: Group mit 0 Werten - Firebird 2.5

  Alt 18. Jun 2020, 23:22
https://stackoverflow.com/questions/...lect-statement

Aber vielleicht gibt es ja doch im Firebird schon was Fertiges ala generate_series
https://www.postgresql.org/docs/curr...tions-srf.html
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Dumpfbacke

Registriert seit: 10. Mär 2005
Ort: Mitten in Deutschland
328 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

AW: Group mit 0 Werten - Firebird 2.5

  Alt 19. Jun 2020, 06:32
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

https://www.delphipraxis.net/203497-...it-join-2.html

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

https://www.gotomeet.me/ibexpert.
Tanja

Geändert von Dumpfbacke (19. Jun 2020 um 06:35 Uhr)
  Mit Zitat antworten Zitat
Frickler

Registriert seit: 6. Mär 2007
Ort: Osnabrück
557 Beiträge
 
Delphi XE6 Enterprise
 
#5

AW: Group mit 0 Werten - Firebird 2.5

  Alt 19. Jun 2020, 09:23
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.
Zu der Monatstabelle gabs hier https://www.delphipraxis.net/1394612-post5.html auch nochmal nen heißen Tipp.
  Mit Zitat antworten Zitat
alex517
Online

Registriert seit: 23. Nov 2004
Ort: Bernau b. Berlin
273 Beiträge
 
Delphi XE5 Enterprise
 
#6

AW: Group mit 0 Werten - Firebird 2.5

  Alt 19. Jun 2020, 09:52
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
Alexander
  Mit Zitat antworten Zitat
lowmax_5

Registriert seit: 9. Mai 2003
Ort: Münster, NRW
257 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Group mit 0 Werten - Firebird 2.5

  Alt 19. Jun 2020, 12:08
Vielen Dank für die Tipps. Ich werde es mit Hilfe der SP umsetzen!
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:14 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz