Summe per SQL bei left join

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

RobertG
********
Beiträge: 2067
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Summe per SQL bei left join

Beitrag von RobertG »

Hallo Gast,

eine Summierung in SQL geht nur, wenn die anderen Felder, die in der Abfrage vorhanden sind, einer Gruppierung unterliegen. Das ist bei Deiner 2. Abfrage nicht der Fall. Das müsste auch die (englischsprachige) Fehlermeldung besagen.
Etwas frei übersetzt: Der folgenden Ausdruck enthält keine der Sammelfunktionen oder eine Gruppierung. ...
Du musst also das "rec_datum" und den "rec_betrag" in die Gruppierung mit einbauen.

Code: Alles auswählen

SELECT "tRechnung"."rec_id" AS "rec_id", SUM( "tZahlung"."zah_betrag" ), "tRechnung"."rec_datum", "tRechnung"."rec_betrag" FROM { OJ "tRechnung" LEFT OUTER JOIN "tZahlung" ON "tRechnung"."rec_id" = "tZahlung"."zah_rec_id" } GROUP BY "tRechnung"."rec_id", "tRechnung"."rec_datum", "tRechnung"."rec_betrag"
Alternativ kannst Du solche Summierungen auch mittels korrelierender Unterabfrage lösen:

Code: Alles auswählen

SELECT "a"."rec_id" AS "rec_id", (SELECT SUM( "tZahlung"."zah_betrag" ) FROM "tZahlung" WHERE "a"."rec_id" = "zah_rec_id") AS "zah_betrag", "a"."rec_datum", "a"."rec_betrag" FROM "tRechnung" AS "a" GROUP BY "a"."rec_id"
Details zu korrelierenden Unterabfragen siehe das Base-Handbuch, in der Fassung 4.2 S. 197ff

Gruß

Robert
WSO
*****
Beiträge: 233
Registriert: Di, 22.04.2014 13:03

Re: Summe per SQL bei left join

Beitrag von WSO »

Ich haette das mit zwei views gemacht, ist mir persoenlich uebersichtlicher:

1. zur Summenbildung
SELECT "zah_rec_id", SUM( "zah_betrag" ) AS "sum_zah_betrag" FROM "tZahlung" GROUP BY "zah_rec_id" ORDER BY "zah_rec_id" ASC
2. Verknuefung mit restlichern Daten

Code: Alles auswählen

SELECT "tRechnung"."rec_id", "tRechnung"."rec_datum", "tRechnung"."rec_betrag", "vSummeZahlung"."sum_zah_betrag" FROM { OJ "tRechnung" LEFT OUTER JOIN "vSummeZahlung" ON "tRechnung"."rec_id" = "vSummeZahlung"."zah_rec_id" }
Gruss,
Wolfram
Antworten