Laufende Summen in Abfragen

Lies diesen Artikel und viele weitere mit einem kostenlosen, einwöchigen Testzugang.

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.

Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...

Testzugang

eine Woche kostenlosen Zugriff auf diesen und mehr als 1.000 weitere Artikel

diesen und alle anderen Artikel mit dem Jahresabo

Schreibe einen Kommentar