1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen
  2. Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, Oracle, Sql-Server, Postgres, Access uvm
    Information ausblenden

JOIN über 3 Tabellen mit SUM-Funtion

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von peter_w, 1 September 2010.

  1. peter_w

    peter_w Neuer Benutzer

    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
     
  2. thomas_w

    thomas_w Datenbank-Guru

    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
     
  3. peter_w

    peter_w Neuer Benutzer

    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!!!
     
Die Seite wird geladen...

Diese Seite empfehlen