Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: herb54 am Mai 16, 2021, 19:30:32

Titel: Fortlaufende Summe einer Abfrage
Beitrag von: herb54 am Mai 16, 2021, 19:30:32
Hallo zusammen,

ich möchte eine fortlaufende Summe bilden. Die Tabelle SummeUmsatzMT sieht folgendermaßen aus:

Monat MonatUmsatz  Jahr
1         400€                 2021
2         320€                 2021 
3         790€                 2021   

Es soll eine  fortlaufende Summe über den Monatsumsatz gebildet werden und das Ergebnis sollte so aussehen:
Monat MonatUmsatz  Summe   Jahr
1         400€                  400€       2021
2         320€                  720€       2021 
3         790€                 1510€      2021 

Mein SQL Code dafür:
SELECT Year(Date()) AS Jahr, SummeUmsatzMT.Monat, SummeUmsatzMT.MonatUmsatz,
Nz([MonatUmsatz]+Nz(DSum("MonatUmsatz","SummeUmsatzMT","[Monat]<=" [Monat]))) AS Summe
FROM SummeUmsatzMT;

Ich bekomme eine Fehlermeldung: Fehlender Operator und komme da nicht weiter.
Kann mir da jemand helfen?

Grüße
Herbert
       
Titel: Re: Fortlaufende Summe einer Abfrage
Beitrag von: herb54 am Mai 16, 2021, 20:12:25
Hallo,

die genaue Fehlermeldung lautet:

Synthaxfehler (fehlender Operator) in Abfrageausdruck 'Nz([MonatUmsatz]+Nz(DSum("MonatUmsatz","SummeUmsatzMT","[Monat]<=" [Monat])))'

Grüße
Herbert
Titel: Re: Fortlaufende Summe einer Abfrage
Beitrag von: ebs17 am Mai 16, 2021, 20:56:23
Da fehlt ein & zur Verkettung mit Monat.
Titel: Re: Fortlaufende Summe einer Abfrage
Beitrag von: herb54 am Mai 16, 2021, 22:10:47
Hallo Eberhard,

vielen Dank! Jetzt läuft die Abfrage zwar leider stimmt die Summenbildung nicht:


SELECT Year(Date()) AS Jahr, Monat, MonatUmsatz,
Nz([MonatUmsatz]+Nz(DSum("MonatUmsatz","SummeUmsatzMT","[Monat]<=" & [Monat]))) AS Summe
FROM SummeUmsatzMT;

Monat MonatUmsatz  Summe       Jahr
1         400€     78898,24   2021
2         320€    181263,24   2021
3         790€    281094,24   2021

Schon ein bisschen arg daneben! Wo liegt denn mein Fehler?

Grüße
Herbert
Titel: Re: Fortlaufende Summe einer Abfrage
Beitrag von: ebs17 am Mai 17, 2021, 08:04:42
ZitatWo liegt denn mein Fehler?
Der Optimismus auf nur einen Fehler ist recht oft nicht berechtigt.

Deine Abfrage und die gezeigte Tabelle haben nichts direkt miteinander zu tun. Das ist freies Fabulieren, aber nicht eine sachdienliche Darstellung.
Aus den gegebenen Zahlen sind die Summen nicht ableitbar, die Abfrage mit nur genau diesen Datensätzen in der Tabelle sieht sehr wahrscheinlich anders aus.
Nur auf den Monat zu vergleichen dürfte bei jahresübergreifenden Daten arg ins Auge gehen.
[MonatUmsatz]+Was das bedeuten soll, bleibt unklar. Dem Summieren von DSum vertraust Du wohl nicht?

ZitatSchon ein bisschen arg daneben!
Es gibt nur falsch oder richtig. Hier darfst Du froh sein, dass Dir das falsch sehr klar verdeutlicht wird. Irgendwie ein Ergebnis kann es ja nicht sein.

So etwas sollte bei der gezeigten Datenlage ein richtiges Ergebnis zeigen:
SELECT
   U.Monat,
   U.MonatUmsatz,
   Nz(DSum("MonatUmsatz", "SummeUmsatzMT", "Monat <= " & U.Monat) AS Summe
FROM
   SummeUmsatzMT AS U
Titel: Re: Fortlaufende Summe einer Abfrage
Beitrag von: herb54 am Mai 19, 2021, 18:29:42
Hallo Eberhard,
vielen Dank! So läuft das Ganze jetzt einwandfrei:

SELECT SummeUmsatzMT.Monat,
SummeUmsatzMT.MonatUmsatz,
SummeUmsatzMT.Jahr,
Nz(DSum("MonatUmsatz","SummeUmsatzMT","Monat<=" & [SummeUmsatzMT].[Monat])) AS Summe
FROM SummeUmsatzMT;


Was mir jetzt an dem Ganzen Konstrukt noch nicht so klar ist, ist die Schreibweise des Kriteriums:

"Monat<=" & [SummeUmsatzMT].[Monat]

Wieso wird zuerst ein Feld als Zeichenfolge definiert "Monat..." und dann als normale Feldangabe [SummeUmsatzMT].[Monat] ???

Grüße
Herbert





Titel: Re: Fortlaufende Summe einer Abfrage
Beitrag von: ebs17 am Mai 19, 2021, 19:04:00
Das DSum ist eine eigene Abfrage, gekapselt in einer Accessfunktion.
SELECT SUM(MonatUmsatz) FROM SummeUmsatzMT WHERE Monat = 3Die Ähnlichkeit/Gleichartigkeit sollte auffallen.

ZitatWieso wird zuerst ein Feld als Zeichenfolge definiert "Monat..."
Das ist das Feld der DSum-Abfrage für das Kriterium.

Zitat...  und dann als normale Feldangabe [SummeUmsatzMT].[Monat]
Das ist dann der Vergleichswert für das Kriterium. Der kommt jetzt aus der Hauptabfrage aus dem jeweiligen Datensatz, für das DSum aber von außen. Daher muss auch das [SummeUmsatzMT].[Monat] aus den Anführungsstrichen, also aus dem String, herausgenommen werden, so wie das gleichlautend beim Zusammensetzen per VBA passieren muss.

Nicht zuletzt: Bei zweimal Monat ist es zum Lesen und zum Verständnis besser, wenn mit vorangestelltem Tabellennamen/Alias dargestellt wird, wo so ein Wert herkommt.
Titel: Re: Fortlaufende Summe einer Abfrage
Beitrag von: herb54 am Mai 19, 2021, 20:27:33
Hallo Eberhard,

super Antwort! Wieder was gelernt! Leider gibt es derart ausführliche Erklärungen selten im Netz!
Vielen Dank für deine Hilfe!
Grüße
Herbert