Seite 1 von 1

[GELÖST]Summe in Abfrage /sql

Verfasst: Di 22. Okt 2013, 07:19
von eiswiese
Ich habe hier 2 Tabellen (Schichtdaten und Tbl_ZeitraumFilter) und möchte die Umsatzsumme pro Tag (für einen per Formular/Tabelle gefilterten Zeitraum) mit einer Abfrage angezeigt bekommen. Das klappt zunächst für die Einzelbeträge auch ganz wunderbar, mittels

SELECT "Schichtdaten"."SchichtDatum", "Schichtdaten"."7%Bar", "Schichtdaten"."19%Bar" FROM "Schichtdaten", "Tbl_ZeitraumFilter" WHERE "Schichtdaten"."SchichtDatum" BETWEEN "Tbl_ZeitraumFilter"."VonDatum" AND "Tbl_ZeitraumFilter"."BisDatum" ORDER BY "Schichtdaten"."SchichtDatum" ASC

Sobald ich aber versuche die Summe des jeweiligen Tages zu bilden, mittels

SELECT "Schichtdaten"."SchichtDatum", SUM( "Schichtdaten"."7%Bar" ) AS "Umsatzsumme 7%", SUM( "Schichtdaten"."19%Bar" ) AS "Umsatzsumme 19%" FROM "Schichtdaten", "Tbl_ZeitraumFilter" WHERE "Schichtdaten"."SchichtDatum" BETWEEN "Tbl_ZeitraumFilter"."VonDatum" AND "Tbl_ZeitraumFilter"."BisDatum" ORDER BY "Schichtdaten"."SchichtDatum" ASC

gibt´s Gemecker:
SQL-Status: 37000
Fehler-Code: -67
Not in aggregate function or group by clause: org.hsqldb.Expression@12cdd20 in statement [SELECT "Schichtdaten"."SchichtDatum", SUM( "Schichtdaten"."7%Bar" ) AS "Umsatzsumme 7%", SUM( "Schichtdaten"."19%Bar" ) AS "Umsatzsumme 19%" FROM "Schichtdaten", "Tbl_ZeitraumFilter" WHERE "Schichtdaten"."SchichtDatum" BETWEEN "Tbl_ZeitraumFilter"."VonDatum" AND "Tbl_ZeitraumFilter"."BisDatum" ORDER BY "Schichtdaten"."SchichtDatum" ASC]


Ich habe es auch schon mit
SELECT "Schichtdaten"."SchichtDatum", (SELECT SUM("Schichtdaten"."7%Bar")).....
versucht, aber auch das funktioniert nicht.
Da steht wohl einer auf dem Schlauch... :?:

Re: Summe in Abfrage /sql

Verfasst: Di 22. Okt 2013, 08:52
von RobertG
Hallo eiswiese,
Not in aggregate function or group by clause
Du kannst die Summe eines Feldes nur nehmen, wenn Du die anderen Felder der Abfrage gruppierst. Willst Du die Summe für ein bestimmtes Schichtdatum? Dann füge der Abfrage "GROUP BY "Schichtdaten"."Schichtdatum" hinzu.
Willst Du die Summe über einen entsprechenden Zeitraum, so musst Du eine Unterabfrage stellen:

Code: Alles auswählen

SELECT "Schichtdaten"."SchichtDatum", SELECT(SUM( "Schichtdaten"."7%Bar" ) FROM "Schichtdaten", "Tbl_ZeitraumFilter" WHERE "Schichtdaten"."SchichtDatum" BETWEEN "Tbl_ZeitraumFilter"."VonDatum" AND "Tbl_ZeitraumFilter"."BisDatum" ) AS "Umsatzsumme 7%", SELECT(SUM( "Schichtdaten"."19%Bar" ) FROM "Schichtdaten", "Tbl_ZeitraumFilter" WHERE "Schichtdaten"."SchichtDatum" BETWEEN "Tbl_ZeitraumFilter"."VonDatum" AND "Tbl_ZeitraumFilter"."BisDatum" ) AS "Umsatzsumme 19%" FROM "Schichtdaten", "Tbl_ZeitraumFilter" WHERE "Schichtdaten"."SchichtDatum" BETWEEN "Tbl_ZeitraumFilter"."VonDatum" AND "Tbl_ZeitraumFilter"."BisDatum" ORDER BY "Schichtdaten"."SchichtDatum" ASC
Zur Tabellenkonstruktion:
Was machst Du, wenn sich die Mehrwertsteuersätze ändern? Heißen dann die Felder weiterhin 7% bzw. 19%?

Gruß

Robert

Re: Summe in Abfrage /sql

Verfasst: Di 22. Okt 2013, 08:54
von pmoegenb
Hallo eiswiese,
in der Fehlermeldung wird doch auf die fehlende

Code: Alles auswählen

GROUP BY
Klausel hingewiesen, die bei Aggregatfunktionen wie z. B. SUM erforderlich sind. D.h., ohne Gruppierung der Datensätze können diese Funktionen nicht ausgeführt werden.

Füge also vor der

Code: Alles auswählen

ORDER BY "Schichtdaten"."SchichtDatum"
Klausel noch die Klausel

Code: Alles auswählen

GROUP BY "Schichtdaten"."SchichtDatum"
ein.

Edit: Robert war schneller

Re: Summe in Abfrage /sql

Verfasst: Di 22. Okt 2013, 13:53
von eiswiese
Das war jetzt aber zu einfach... :oops:
Funktioniert tadellos!

@Robert: dann wechsel ich halt in´s Hotelgewerbe (vielleicht rettet mich dann ja die Partei, die es nicht mehr gibt)!
Aber im Ernst: Da lauert im Hintergrund auf Sicht ja in der Tat noch eine ganz andere Baustelle. Riecht nach einer Extra-Tabelle mit MwSt-Sätzen und anderen Überschriften...

@Peter: das mit dem "group by..." hatte ich tatsächlich auch schon bemerkt, aber meine Versuche, die Gruppierung in derselben Abfragespalte (Schichtdaten.Schichtdatum) vorzunehmen, funktionierten nicht. Mit der zusätzlichen Spalte desselben Namens klappt das jetzt. Warum eigentlich?

So oder so: Ich danke euch beiden für die schnelle Hilfe und erkläre euch BEIDE (nach Sichtung des Zielfotos) zu Siegern! :)