Laufende Summen in Abfragen

Immer wieder taucht die Frage auf, wie man in Access die Inhalte von Zahlenfelder mehrerer Datensätze aufsummiert. Unter Excel ist das einfach – dort trägt man einfach die Summe aus der Summe bis zur vorherigen Zeile plus dem Wert der aktuellen Zeile ein. ändert man Werte, ändern sich auch die Summen. Im Artikel „Laufende Summen in Tabellen“ haben wir uns angesehen, wie dies mit einem zusätzlichen Feld in Tabelle gelingt. In diesem Artikel schauen wir uns an, wie dies unter Access unter Verwendung von Abfragen gelingt.

Beispieldatenbank

Die Beispiele dieses Artikels finden Sie in der Datenbank 1901_KumulierenInAbfragen.accdb.

Beispieltabelle

Wie im oben bereits erwähnten Artikel Laufende Summen in Tabellen verwenden wir auch in diesem Artikel die Tabelle tblAusgaben als Beispiel (siehe Bild 1).

Tabelle für Beispielzwecke

Bild 1: Tabelle für Beispielzwecke

Laufende Summe per Abfrage

Dort finden Sie allerdings kein Feld namens LaufendeSumme, mit dem wir im Artikel Laufende Summen in Tabellen gezeigt haben, wie Sie die Werte eines Feldes in einem anderen Feld aufsummieren. Stattdessen wollen wir ein solches Feld mithilfe einer Abfrage hinzufügen.

Während wir bei der Methode mit dem Aufsummieren der Werte direkt in der Tabelle die Datensätze der Tabelle durchlaufen und diese dabei Datensatz für Datensatz aufsummiert haben, sieht die Technik bei Abfragen ein wenig anders aus.

Hier können wir zwar durch eine geschickt formulierte Abfrage mit einem berechneten Feld auf die Werte des vorherigen Datensatzes zugreifen, aber nicht auf den Wert, den das berechnete Feld für den vorherigen Datensatz geliefert hat.

Laufende Summe nach Primärschlüsselwert

Stattdessen müssen wir, wenn wir etwa den Wert eines Feldes über alle Datensätze aufsummieren wollen, immer die Summe über das Feld für alle Datensätze ermitteln, die sich in der Reihenfolge vor dem aktuellen Datensatz befinden. Dazu nutzen wir eine Abfrage, die alle Felder der Tabelle tblAusgaben enthält. Außerdem fügen wir dieser Abfrage ein weiteres Feld hinzu, das wir als berechnetes Feld auslegen.

Also geben wir den Namen für die anzuzeigende Spalte vorn an, gefolgt von einem Doppelpunkt und dem Ausdruck, der die anzuzeigenden Werte festlegt.

Für den ersten Datensatz soll dieser Ausdruck den Wert des Feldes Betrag des aktuellen Datensatzes ausgeben, für die übrigen Datensätze jeweils die Summe aller Werte des Feldes Betrag aller Datensätze, die in der Reihenfolge über dem aktuellen Datensatz liegen und dazu noch den Wert des Feldes Betrag des aktuellen Datensatzes addieren. Dieser Ausdruck sieht wie folgt aus:

LaufendeSumme: DomSumme("Betrag";"tblAusgaben";"AusgabeID <=" & [AusgabeID])

Die Funktion DomSumme entspricht der DSum-Funktion unter VBA. Sie erwartet als ersten Parameter den Namen des Feldes, dessen Werte aufsummiert werden sollen. Der zweite Parameter gibt den Namen der Tabelle oder Abfrage an, welche die Werte liefert.

Und der dritte Parameter liefert das Kriterium, das festlegt, welche Datensätze von der Summenbildung berücksichtigt werden sollen. In diesem Fall lautet dieser "AusgabeID <=" & AusgabeID.

Das bedeutet, dass der Wert des Feldes AusgabeID der Datensätze der Datenquelle aus dem zweiten Parameter mit dem Wert des Feldes AusgabeID des aktuellen Datensatzes verglichen wird.

Der Entwurf dieser Abfrage sieht schließlich wie in Bild 2 aus. Für den Datensatz mit dem Wert 4 im Feld AusgabeID liefert diese Funktion also die Summe der Werte des Feldes Betrag für die Datensätze, die im Feld AusgabeID einen Wert kleiner oder gleich 4 aufweisen.

Abfrage mit laufender Summe, sortiert nach dem Primärschlüsselwert

Bild 2: Abfrage mit laufender Summe, sortiert nach dem Primärschlüsselwert

Das Ergebnis dieser Abfrage sieht für unsere Beispieldaten wie in Bild 3 aus.

Ergebnis der Summenbildung, sortiert nach dem Primärschlüsselwert

Bild 3: Ergebnis der Summenbildung, sortiert nach dem Primärschlüsselwert

Laufende Summe nach Datum

Um die laufende Summe nach dem Datum zu ermitteln, benötigen wir erst einmal ein entsprechendes Kriterium für die Sortierreihenfolge der Datensätze. In diesem Fall wollen wir die Daten zuerst nach dem Datum sortieren, das im Feld Ausgabedatum gespeichert ist, und bei gleichen Datumsangaben nach dem Primärschlüsselwert. Der Entwurf der dazu notwendigen Abfrage sieht wie in Bild 4 aus.

Sortierung nach Ausgabedatum und AusgabeID

Bild 4: Sortierung nach Ausgabedatum und AusgabeID

Wichtig ist hier, dass wir nicht einfach die beiden Felder AusgabeID und Ausgabedatum mit dem Wert Aufsteigend in der Zeile Sortierung versehen können. Dann würde die Sortierung nämlich erst nach dem Primärindex erfolgen und dann nach dem Ausgabedatum, was praktisch bedeuten würde, dass die Datensätze nur nach dem Primärschlüsselfeld sortiert werden würden - die Werte dieses Feldes sind ja eindeutig und somit ist kein zweites Sortierkriterium erforderlich.

Da wir aber dennoch wollen, dass das Feld AusgabeID ganz links als erstes Feld angezeigt wird, müssen wir es ein zweites Mal zur Abfrage hinzufügen. Dieses zweite Feld können wir dann mit der aufsteigenden Sortierung versehen. Außerdem sollten wir seine Anzeige deaktivieren, indem wir das Häkchen aus dem Kontrollkästchen in der Zeile Anzeigen entfernen.

Summenfeld hinzufügen

Nun fügen wir der Abfrage noch ein weiteres Feld hinzu, das als berechnetes Feld ausgelegt wird. Das heißt, dass wir das Feld nicht aus der Feldliste in das Entwurfsraster ziehen, sondern den Ausdruck selbst formulieren. Wo ist der Unterschied dieses Summenfelds im Vergleich zur ersten Abfrage, wo wir nach dem Primärschlüsselfeld sortiert haben Wir müssen das Kriterium ändern, da wir ja nun nach dem Feld Ausgabedatum sortieren.

Normalerweise sollte dies also funktionieren, wenn wir das Feld zur Ermittlung der laufenden Summe etwa wie folgt hinzufügen:

LaufendeSumme: DomSumme("Betrag";"tblAusgaben";"Ausgabedatum <=" & [Ausgabedatum])

Das Ergebnis sieht allerdings wie in Bild 5 aus - wir erhalten #Fehler als Ergebnis. Zum Glück erhalten wir, nachdem wir auf den Wert #Fehler klicken, noch eine aufklärende Fehlermeldung. Diese gibt den Abfrageausdruck aus, der im Falle des ersten Datensatzes so lautet (die letzte Stelle wurde aus offensichtlich aus Platzgründen abgeschnitten):

Sortierung nach Ausgabedatum und AusgabeID mit Fehler

Bild 5: Sortierung nach Ausgabedatum und AusgabeID mit Fehler

Ausgabedatum <= 02.01.201

Möchten Sie weiterlesen? Dann lösen Sie Ihr Ticket!
Hier geht es zur Bestellung des Jahresabonnements des Magazins Access [basics]:
Zur Bestellung ...
Danach greifen Sie sofort auf alle rund 400 Artikel unseres Angebots zu - auch auf diesen hier!
Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:

Schreibe einen Kommentar