Seite 1 von 1

Berechnung mit Daten aus zwei bzw. drei Tabellen

Verfasst: Mi, 19.10.2011 14:21
von mischko
Hallo Base-Spezialisten

Wahrscheinlich ist es eine Kleinigkeit aber ich komm einfach nicht drauf.

Folgendes Szenario:
Drei Tabellen, eine Tabelle Artikel mit den Feldern Artikelnr, Bezeichnung, Beschreibung.
Eine Tabelle Einkauf mit den Feldern Artikelnr, Menge.
Und eine Tabelle Verkauf mit den Feldern Artikelnr, Menge.
Jetzt möchte den Lagerbestand meiner Artikel wissen. Habs mit Abfragen versucht aber entweder wird z.B. falsch gruppiert sodass die Ergebnisse nicht stimmen oder ich bekomme nur ein Ergebniss wenn ich einen Einkauf und Verkauf habe (habe unter Artikelnr 4 einen Einkauf aber noch keinen Verkauf, wird in der Abfrage nicht angezeigt da Artikel"."Artikelnr" = "Einkauf"."Artikelnr" existiert aber "Verkauf"."Artikelnr" = "Artikel"."Artikelnr noch nicht).

SQL-Syntax:
SELECT "Artikel"."Artikelnr", "Artikel"."Bezeichnung", "Artikel"."Beschreibung", SUM( "Einkauf"."Menge" - "Verkauf"."Menge" ) AS "Lagerbestand" FROM "Artikel", "Einkauf", "Verkauf" WHERE "Artikel"."Artikelnr" = "Einkauf"."Artikelnr" AND "Verkauf"."Artikelnr" = "Artikel"."Artikelnr" GROUP BY "Artikel"."Artikelnr", "Artikel"."Bezeichnung", "Artikel"."Beschreibung" ORDER BY "Artikel"."Bezeichnung" ASC

Ich hoffe mir kann jemand helfen
mischko

Re: Berechnung mit Daten aus zwei bzw. drei Tabellen

Verfasst: Mi, 19.10.2011 15:33
von gogo
Du musst den Join in eine Richtung gehen lassen (RIGHT OUTER JOIN ...), dann werden auch jene Sätze angezeigt, die nur einen Einkauf und keinen Verkauf haben. Der Nullwert der dann in der Spalte steht ("MV" im Beispiel unten) eignet sich aber nicht für Berechnungen, daher muss man ihn zuerst evaluieren (Case when ...) und dann eben die Berechnung oder nur den Wert der Einkaufsspalte anzeigen lassen:

Code: Alles auswählen

SELECT
 "Artikel"."Artikelnr",
 "Artikel"."Bezeichnung",
 "Artikel"."Beschreibung",
 SUM( "Einkauf"."Menge" ) AS "ME",
 SUM( "Verkauf"."Menge" ) AS "MV",
 SUM( CASE WHEN ( "Verkauf"."Menge" IS NULL ) THEN "Einkauf"."Menge" ELSE "Einkauf"."Menge" - "Verkauf"."Menge" END ) AS "Stand" 
FROM
 { OJ "Verkauf" RIGHT OUTER JOIN "Einkauf" ON "Verkauf"."Artikelnr" = "Einkauf"."Artikelnr" }, "Artikel" 
WHERE
 "Artikel"."Artikelnr" = "Einkauf"."Artikelnr" 
GROUP BY 
 "Artikel"."Artikelnr",
 "Artikel"."Bezeichnung",
 "Artikel"."Beschreibung" 
ORDER BY "Artikel"."Bezeichnung" ASC
g