Summe per SQL bei left join

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: Summe per SQL bei left join

Re: Summe per SQL bei left join

von WSO » Di, 29.04.2014 10:29

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

Re: Summe per SQL bei left join

von RobertG » Di, 29.04.2014 07:40

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

Nach oben