Juni 15, 2021, 21:48:10

Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!


Fortlaufende Summe einer Abfrage

Begonnen von herb54, Mai 16, 2021, 19:30:32

⏪ vorheriges - nächstes ⏩

herb54

Mai 16, 2021, 19:30:32 Letzte Bearbeitung: Mai 16, 2021, 19:38:26 von herb54
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
       

herb54

Hallo,

die genaue Fehlermeldung lautet:

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

Grüße
Herbert

ebs17

Da fehlt ein & zur Verkettung mit Monat.
Mit freundlichem Glück Auf!

Eberhard

herb54

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

ebs17

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
Mit freundlichem Glück Auf!

Eberhard

herb54

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






ebs17

Mai 19, 2021, 19:04:00 #6 Letzte Bearbeitung: Mai 19, 2021, 21:00:05 von ebs17
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.
Mit freundlichem Glück Auf!

Eberhard

herb54

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