Select über 2 Tabellen mit Berechnung

mdr1978

Grünschnabel
Hallo,

Ich bin relativ unerfahren auf dem Gebiet und hoffe ihr könnt mir helfen.

Ich habe 2 Tabellen

Tabelle1

Kennung Artikel Menge
E 1250 3
E 1251 7
E 1252 9
V 1252 8
V 1250 5
V 1251 2
E 1252 6
E 1400 5

Tabelle2

Artikel Bestand

1250 9
1251 8
1252 7
1253 0

Nun möchte ich in Tabelle 1 jeweils für E und V die Mengen zusammenrechnen, die auch mehrfach vorkommen können. Diese sollen dann neben denen in Tabelle 2 enthaltenen Beständen dargestellt werden.

Ergebnis

Artikel Bestand Summe-E Summe-V Ausgabe Bestand-2

1250 9 3 5 (3-5) -2 (9-2) 7
1251 8 7 2 (7-2) 5 (8+5) 13
1252 7 15 8 (15-8) 7 (7+7) 14



select T2.Artikel, T2.Bestand, sum(where T1.Kennung = 'E';) as "Summe-E", sum(where T1.Kennung = 'V') as "Summe-V", Berechnung Bestand2
from Tabelle2 T2,Tabelle1 T1
where Bestand > 0;

Das ist zwar totaler Unsinn, aber ich hoffe ihr wisst was ich meine.

MfG
Mario Dirscherl
 
Die Idee ist schon merh oder weniger richtig.
IF() ist der Befehl den du noch brauchst um zu unterscheiden ob es die richtige Kennung ist
LEFT JOIN brauchst du noch im die Daten suaber zusammenzuführen
GROUP BY brauchst du noch um die Daten zusammenzufassen

SQL:
SELECT
    t2.artikel,
    t2.bestand
    SUM(IF(t1.kennung = 'E', t1.menge, 0)) AS summe_e,
    SUM(IF(t1.kennung = 'V', t1.menge, 0)) AS summe_e
FROM
    tabelle2 t2
    LEFT JOIN tabelle1 t1
        ON t2.artikel = t1.artikel
WHERE
    t2.bestand > 0
GROUP BY
    t2.artikel,
    t2.bestand
 
Zuletzt bearbeitet von einem Moderator:
Vielen Dank für die schnelle Antwort.

Ich komme leider erst am Mittwoch zum Testen. Ich hoffe dass es auch so klappt.
Hatte mehrfach schon nach Möglichkeiten gesucht, der Sum() Funktion Parameter zu geben,
aber bisher nicht wirklich was brauchbares gefunden.

Zum Schluss benötige ich dann noch die Summe der "Sum()-Abfragen" (summe_e - summe_v),
würde ich dies über noch eine Summenfunktion mit verschachtelter IF machen,
oder sollte ich da lieber von der SELECT ein VIEW machen, und aus dieser berechnen.
 
Achja, ich geh mal davon aus, du arbeitest mit MySQL. Ansosnten sehen die Befehl ev. gaaaanz anderst aus.

Entwder über CASE
SQL:
SELECT
    t2.artikel,
    t2.bestand
    SUM(IF(t1.kennung = 'E', t1.menge, 0)) AS summe_e,
    SUM(IF(t1.kennung = 'V', t1.menge, 0)) AS summe_v,
    SUM(CASE BINARY t1.kennung WHEN 'e' THEN menge WHEN 'v' THEN -1*menge ELSE 0 END) AS diff
FROM
    tabelle2 t2
    LEFT JOIN tabelle1 t1
        ON t2.artikel = t1.artikel
WHERE
    t2.bestand > 0
GROUP BY
    t2.artikel,
    t2.bestand

Oder als Subquery
SQL:
SELECT
    artikel,
    bestand,
    summe_e,
    summe_v,
    summe_e - summe_v AS diff
FROM
    (SELECT
        t2.artikel,
        t2.bestand
        SUM(IF(t1.kennung = 'E', t1.menge, 0)) AS summe_e,
        SUM(IF(t1.kennung = 'V', t1.menge, 0)) AS summe_v
    FROM
        tabelle2 t2
        LEFT JOIN tabelle1 t1
            ON t2.artikel = t1.artikel
    WHERE
        t2.bestand > 0
    GROUP BY
        t2.artikel,
        t2.bestand) AS mydata
 
Zuletzt bearbeitet von einem Moderator:
Es handelt sich hierbei um eine pervasive-DB.

Meine bisherigen Oracle Prozeduren haben meist funktioniert, waren aber nur einfache Anweisungen.

Sieht auf jeden Fall schon mal gut aus, ... Danke.
 
Zurück