![]() |
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:
Dieses liefert als Ergebnis z.B.
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])
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.
Gibt es einen Trick, es direkt in SQL ohne Programmierung zu machen? Gruß Alfonso |
AW: Ergänzen aller Monate in Ergebnis einer Access Abfrage
Frage zu schnell quer gelesen. Bitte löschen.
|
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 |
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. |
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:
Untetestet. Habe nur einen MSSQL Server zum "spieien" hier. Access SQL kann etwas abweichen.
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 |
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:00 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 by Thomas Breitkreuz