Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Ergänzen aller Monate in Ergebnis einer Access Abfrage (https://www.delphipraxis.net/175199-ergaenzen-aller-monate-ergebnis-einer-access-abfrage.html)

Alfonso 5. Jun 2013 18:53

Datenbank: Access • Version: 2007 • Zugriff über: ADO

Ergänzen aller Monate in Ergebnis einer Access Abfrage
 
Der Titel ist vielleicht etwas irreführend, aber meine Frage ist schwer in einer Zeile zu erklären:
Habe folgende Access-Abfrage:
Code:
SELECT Month([Datum]) AS mm, Sum[Betrag]) AS Total FROM tbl_Rechkopf
GROUP BY Month([Datum]), Year([Datum]) HAVING (Year([Datum])=2013) ORDER BY Month([Datum])
Dieses liefert als Ergebnis z.B.
mmTotal
340
545
1067

Ich möchte aber, dass es mir für alle Monate einen Wert zurückgibt, also Summe 0 für die Monate, die keinen Wert enthalten.
mmTotal
10
20
340
40
545
60
70
80
90
1067
110
120

Gibt es einen Trick, es direkt in SQL ohne Programmierung zu machen?

Gruß
Alfonso

jensw_2000 5. Jun 2013 21:12

AW: Ergänzen aller Monate in Ergebnis einer Access Abfrage
 
Frage zu schnell quer gelesen. Bitte löschen.

Alfonso 5. Jun 2013 21:18

AW: Ergänzen aller Monate in Ergebnis einer Access Abfrage
 
Hallo,
danke für deine Antwort, aber ich glaube du hast die Frage falsch verstanden. Ich will nicht eine 0 vorstellen, sondern das der Monat ausgegeben wird, auch wenn keine Summen vorhanden sind.

UDF kann Access leider nicht, wenn ich es von Delphi aufrufe.

Gruß
Alfonso

Bummi 5. Jun 2013 22:34

AW: Ergänzen aller Monate in Ergebnis einer Access Abfrage
 
Du kannst eine Dummytabelle anlegen und Deine Daten LEFT dazu joinen.
Da es gegf. zukünftig auch Anforderungen bis auf Tagesebene geben könnte würde ich eine Datumstabelle z.B. von 1980 - 2050 mit Tagen füllen, wenn man Lust hat kann man gleich noch Kalenderwochen und Feiertagsspalten mit aufnehmen. Eine darauf basierende Monatssicht würde ich als Basis für Deine Abfrage nehmen.

jensw_2000 6. Jun 2013 00:21

AW: Ergänzen aller Monate in Ergebnis einer Access Abfrage
 
Access kennt IMHO keine Loops im SQL Code. Daher wird es nicht ohne Hilfstabellen oder zusätzlichen VBA Code gehen. Bummis Lösung ist super, wenn du vor hast dynamische Zeiträume auszuwerten.

Falls Du immer nur ganze Monate kumulieren möchtest, dann reicht dir eine einfache Hilfstabelle mit einem Integer Feld und 12 Datensätzen (1..12).

Der SQL Code würde dann so aussehen:

Code:
SELECT
  HT.Monat AS mm
 ,Sum(ISNULL(Betrag,0)) AS Total
FROM
  tbl_Rechkopf RK
RIGHT OUTER JOIN Hilfstabelle HT
  ON HT.Monat = Month(RK.Datum)
  OR Month(RK.Datum) IS NULL
GROUP BY
  HT.MONAT
 ,Year(RK.Datum)
HAVING
  (Year(RK.Datum)=2013)
  OR RK.Datum IS NULL --- damit auch Monate selektiert werden, in denen keine Daten in RK vorhanden sind
ORDER BY
  HT.Monat
Untetestet. Habe nur einen MSSQL Server zum "spieien" hier. Access SQL kann etwas abweichen.

Jumpy 6. Jun 2013 07:49

AW: Ergänzen aller Monate in Ergebnis einer Access Abfrage
 
Wahrscheinlich nicht so performant, geht aber glaub ich auch, ist die Subselect-Variante:
Code:
Select
  D.Monat as MM,
  (
  Select Sum(Betrag) FROM tbl_Rechkopf
  Where Year(Datum) = 2013 and Month(Datum)=D.Monat
  ) as Total
From
  Dummytable D

----------------------
Oder ohne DummyTable:
From
  (
  Select 01 as Monat
  Union All
  Select 02 as Monat
  Union All
  ...
  Select 12 as Monat
  ) D


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:04 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