Berechnung mit Daten aus zwei bzw. drei Tabellen

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

mischko
Beiträge: 1
Registriert: Mi, 19.10.2011 13:56

Berechnung mit Daten aus zwei bzw. drei Tabellen

Beitrag 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
gogo
*****
Beiträge: 207
Registriert: Mi, 10.11.2010 13:11

Re: Berechnung mit Daten aus zwei bzw. drei Tabellen

Beitrag 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
g
LucidLynx/WinXP LibreOffice v3.3.2 ab 03/12 v3.3.2 & v3.4.5
Antworten