[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Sep 2005
    Beiträge
    32

    SQL Summen aus mehreren Tabellen mit unterschiedlicher Satzanzahl

    Ich möchte aus 2 verschiedenen Dateien jeweils Summen bekommen, unabhängig wieviele Sätze mit gleichem Schlüssel in den jeweiligen Dateien stehen

    Tabelle1:
    Nummer, Position, Sollkosten

    Tabelle2:
    Nummer, Position, Istkosten

    Tabelle1 ist immer mind. mit einem Satz gefüllt. Tabelle2 kann 0 bis N Sätze haben.

    select tabelle1.nummer, sum(sollkosten), sum(istkosten)
    from tabelle1 left join tabelle2 on tabelle1.nummer=tabelle2.nummer

    Problem: Wenn in Tabelle1 ein Satz steht und in Tabelle2 zwei Sätze, dann wird die Summe aus Tabelle1 verdoppelt. Wie kann ich das vermeiden?

    Danke & Gruß

  2. #2
    Registriert seit
    Jun 2001
    Beiträge
    1.973
    With a as (select nr, pos, sum(istkosten) from tab2 group by nummer)
    select tabelle1.nummer, sum(sollkosten), sum(istkosten)
    from tabelle1 left join a on tabelle1.nummer=a.nummer
    Das Notwendige steht über dem technisch machbaren.
    (klingt komisch, funktioniert aber!)

  3. #3
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Da hättest du eigentlich einen Fehler bekommen müssen, da der Group By einfach fehlt:

    select tabelle1.nummer, sum(sollkosten), sum(istkosten)
    from tabelle1 left join tabelle2 on tabelle1.nummer=tabelle2.nummer
    group by tabelle1.nummer
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  4. #4
    Registriert seit
    Sep 2005
    Beiträge
    32
    Danke für die Hilfe. Ich hatte tatsächlich das GOUP BY in meinem Beitrag vergessen. Im Original hatte ich es natürlich drin. Die Lösung ist, dass ich die Istkosten vorher in der WITH Anweisung gruppiere. Korrekt lautet das Statement:
    With a as (select nr, sum(istkosten) as istkosten
    from tabelle2 group by tabelle2.nr)
    select tabelle1.nr, sum(sollkosten), sum(istkosten)
    from tabelle1 left join a on tabelle1.nr=a.nr
    group by tabelle1.nr

    DANKE Euch! :-)

  5. #5
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Das Problem besteht nicht in der obigen Aussage:

    "Problem: Wenn in Tabelle1 ein Satz steht und in Tabelle2 zwei Sätze, dann wird die Summe aus Tabelle1 verdoppelt."

    Hier kann es keine "Verdoppelung" kommen, da dies ja die Regel ist, wenn ich 1 Kopf und n Positionen habe (1:N-Beziehung).
    Dein Problem tritt dann auf, wenn in Tabelle 1 mehr als 1 Satz vorhanden ist. Dann tritt eben die Vervielfältigung ein und erzwingt eben ein getrenntes "Vorverdichten" von Tabelle 1 und 2, was eben einer N:M-Beziehung entspricht.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  6. #6
    Registriert seit
    Nov 2003
    Beiträge
    2.304
    Naja, wenn man zu jeder der n Positionen den Kopf ermittelt, kann man leicht auf n Köpfe kommen...

  7. #7
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Dann hast du die Tabellen verdreht und eine N:1-Beziehung definiert;-).
    Deshalb gibt es ja auch noch den "Right [outer] Join", der das dann wieder gerade biegt.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  8. #8
    Registriert seit
    Nov 2003
    Beiträge
    2.304
    Wenn man per SQL mit einem SELECT zu einem (1) Kopf seine (N) Positionen dazuliest, sollte man in diesem SELECT besser nicht die Beträge dieses Kopfs aufsummieren...

  9. #9
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Stimmt, da könnte man MIN/MAX verwenden.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

Similar Threads

  1. SQL Ermittlung von Summen über eine nicht verknüpfte Datei/Tabelle
    By MiMarkow in forum NEWSboard Programmierung
    Antworten: 9
    Letzter Beitrag: 17-03-17, 09:39
  2. SQL Texte in unterschiedlicher länge
    By Robi in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 01-02-17, 12:46
  3. CPYF mit unterschiedlicher Anzahl Felder
    By SabineK in forum IBM i Hauptforum
    Antworten: 7
    Letzter Beitrag: 24-11-14, 20:18
  4. ein SFLCTL mit mehreren SFL-Records
    By Malte in forum NEWSboard Programmierung
    Antworten: 10
    Letzter Beitrag: 17-10-14, 12:13
  5. NetServer mit mehreren IP's betreiben
    By Starocotes in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 10-11-13, 01:26

Tags for this Thread

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •