JOIN über 3 Tabellen mit SUM-Funtion

peter_w

Neuer Benutzer
Beiträge
2
Hallo,

hat jemand von euch einen Tipp für mich für folgendes vereinfachtes Szenario:
Es gibt die drei folgenden Tabellen mit ihren Spalten und Datensätzen:

Gesellschafter
ID Nachname Vorname
1 Wurst Hans
2 Muster Max

Anteilscheine
ID GesID Wert
1 1 200
2 1 300
3 2 450
4 2 150

Ertragsanteile
ID GesID AntID Wert
1 1 1 20
2 1 1 30
3 1 2 50
4 1 2 40
5 2 3 70
6 2 3 90
7 2 4 15
8 2 4 150

Die Tabelle Gesellschafter ist mit der Tabelle Anteilscheine in einer 1:N Beziehung verbunden, d.h. zu einem Gesellschafter kann es mehrere Anteilscheine geben.
Die Tabelle Anteilscheine ist mit der Tabelle Ertragsanteile in einer 1:N Beziehung verbunden, d.h. zu einem Anteilschein kann es mehrere Ertragsanteile geben.

Die Aufgabenstellung ist nun die, dass ich mit einer Stored Procedure die Summe der Spalte „Wert“ der Tabelle „Anteilscheine“ addiert mit der Summe der Spalte „Wert“ der Tabelle „Ertragsanteile“ zu jedem einzelnen Gesellschafter abfragen muss.

Folgende Abfrage verwende ich zurzeit in einer Stored Procedure:
SELECT Gesellschafter.ID, Gesellschafter.Nachname, Gesellschafter.Vorname, SUM(Anteilscheine.Wert+Ertragsanteile.Wert)
AS GesellschafterSumme
FROM Gesellschafter INNER JOIN
Anteilscheine ON Gesellschafter.ID = Anteilscheine.GesID INNER JOIN
Ertragsanteile ON Gesellschafter.ID = Ertragsanteile.GesID AND Anteilscheine.ID = Ertragsanteile.AntID
GROUP BY Gesellschafter.ID, Gesellschafter.Nachname, Gesellschafter.Vorname

Als Ergebnis der Abfrage bekomme ich zwei Zeilen:
ID Nachname Vorname GesellschafterSumme
1 Wurst Hans 1140
2 Muster Max 1525

Erwartet hätte ich jedoch folgendes Ergebnis:
ID Nachname Vorname GesellschafterSumme
1 Wurst Hans 640
2 Muster Max 925

Ich habe mir stundenlang das Problem angesehen, komme jedoch zu keiner Lösung. Ist dies mit SQL nicht lösbar?

Ich freue mich über jede Antwort.

Gruß

Peter
 
Werbung:
AW: JOIN über 3 Tabellen mit SUM-Funtion

Stimmt, ein lustiges Problem.

Dazu folgendes Beispiel:

Code:
CREATE TABLE gesellschafter (
 id INT NOT NULL,
 nachname VARCHAR(20) NOT NULL,
 vorname VARCHAR(20) NOT NULL,
 PRIMARY KEY (id)
);
INSERT INTO gesellschafter VALUES
(1, 'Wurst', 'Hans'),
(2, 'Muster', 'Max');
 
CREATE TABLE anteilscheine (
 id INT NOT NULL,
 gesid INT NOT NULL,
 wert INT NOT NULL,
 PRIMARY KEY (id)
);
INSERT INTO anteilscheine VALUES
(1 ,1 ,200), 
(2 ,1 ,300),
(3 ,2 ,450), 
(4 ,2 ,150);
CREATE TABLE ertragsanteile (
 id INT NOT NULL,
 gesid INT NOT NULL,
 antid INT NOT NULL,
 wert INT NOT NULL,
 PRIMARY KEY (id) 
);
INSERT INTO ertragsanteile VALUES
(1 ,1 ,1 ,20),
(2 ,1 ,1 ,30), 
(3 ,1 ,2 ,50),
(4 ,1 ,2 ,40),
(5 ,2 ,3 ,70),
(6 ,2 ,3 ,90), 
(7 ,2 ,4 ,15),
(8 ,2 ,4 ,150);
 
 
SELECT gesellschafter.id,
       gesellschafter.nachname,
       gesellschafter.vorname,
       sum_anteilscheine.wert + sum_ertragsanteile.wert AS gesellschaftersumme
  FROM gesellschafter
  JOIN (SELECT anteilscheine.gesid, SUM(anteilscheine.wert) AS wert 
          FROM  anteilscheine
         GROUP BY anteilscheine.gesid ) sum_anteilscheine
    ON sum_anteilscheine.gesid = gesellschafter.id
  JOIN (SELECT ertragsanteile.gesid, SUM(ertragsanteile.wert) AS wert 
          FROM  ertragsanteile
         GROUP BY ertragsanteile.gesid) sum_ertragsanteile
    ON sum_ertragsanteile.gesid = gesellschafter.id
ORDER BY gesellschafter.id;
 
+----+----------+---------+---------------------+
| id | nachname | vorname | gesellschaftersumme |
+----+----------+---------+---------------------+
|  1 | Wurst    | Hans    |                 640 |
|  2 | Muster   | Max     |                 925 |
+----+----------+---------+---------------------+
2 rows in set (0.02 sec)
mysql>

Zwar mit MySQL, aber ich denke MS-SQL kann das auch so...

Grüße
Thomas
 
Werbung:
AW: JOIN über 3 Tabellen mit SUM-Funtion

Danke Thomas. Das ist genau die Abfrage, die ich brauche. Und sie funktioniert auch in MS SQL. Vielen Dank!!!
 
Zurück
Oben