Seite 1 von 1

Re: Summe per SQL bei left join

Verfasst: Di, 29.04.2014 07:40
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

Re: Summe per SQL bei left join

Verfasst: Di, 29.04.2014 10:29
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