Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

SQL Inner join 2 Tabellen

Dieses Thema im Forum "Andere Datenbankserver" wurde erstellt von sascha0301, 26 April 2012.

  1. sascha0301

    sascha0301 Neuer Benutzer

    Hallo zusammen,

    ich habe folgendes Problem...
    Ich verbinde zwei Tabellen miteinander, das ist kein Problem, funktioniert.
    Die eine Tabelle sind Kopf informationen und die andere Tabelle sind Posten informationen
    Zur Erklärung
    1 Kopfsatz = N Postensätze
    Ich habe also 1 Kopf Satz mit dem Inhalt Name und Betrag und 3 Posten Sätze mit Artikel und Betrag

    Beispiel
    Kopf_TestUser Kopf_Betrag Posten_Artikel Posten_Betrag
    Schmidt 1000 1 500
    Schmidt 1000 2 300
    Schmidt 1000 3 200

    Ich bekomme 3 mal den Kopfsatz angezeigt, weil ich ja auch 3 positionen habe, bis jetzt alles noch lgoisch und nachzuvollziehen.
    Ich möchte aber nun einen Sum auf den Posten_Betrag machen, das funktioniert zwar, aber nicht so wie ich es möchte :D

    Ergebnis
    Kopf_TestUser Kopf_Betrag Posten_Betrag
    Schmidt 3000 1000

    Habe ich irgendwie die möglich das der Kopfbetrag nicht mit aufaddiert wird?
    Das korrkte Ergebis müsste so aussehen
    Kopf_TestUser Kopf_Betrag Posten_Betrag
    Schmidt 1000 1000

    Klappt so was in einem SQL Befehl ?
    Ich möchte micht über eine View oder Temp_Tabelle arbeiten.

    Vielen Dank für eure Hilfe =)
     
  2. PLSQL_SQL

    PLSQL_SQL Datenbank-Guru

    Kannst du dein SQL-Stmt posten?

    Normalerweise so:

    select k.Kopf_TestUser
    ,k.Kopf_Betrag
    ,sum(p.Posten_Betrag) as Posten_Betrag

    from Kopfsatz k inner join Postensatz p on k.kopfsatzid = p.kopfsatzid

    group by k.Kopf_TestUser, k.Kopf_Betrag


    Lg
     
  3. sascha0301

    sascha0301 Neuer Benutzer

    vielen Dank schonmal.... ich glaube aber das funktioniert nicht =)
    ich hatte das oben genannte beispiel stark vereinfacht...

    hier das SQL:
    zur Erklärung ich mach ein inner join auf die selbe Tabelle. Anhand eines Kennzeichen werden die Datensätze unterschieden...
    Kennezichen STPLIS 1 und 2



    SELECT a.STKTO,
    a.STTENR,
    sum(a.STWT01) as plan_menge,
    sum(a.STWT02) as plan_wert,
    a.stmoan,
    b.STKTO,
    b.STTENR,
    sum(b.STWT01) as ist_menge,
    sum(b.STWT02) as ist_wert,
    b.stmoan
    FROM (
    vwl01.sta01pf as a inner join vwl01.sta01pf as b
    on
    a.stfa = b.stfa and
    a.stabkz = b.stabkz and
    a.stwerk = b.stwerk and
    a.stsa09 = b.stsa09 and
    a.stbaun = b.stbaun and
    a.stst29 = b.stst29 and
    a.stkto = b.stkto
    )
    WHERE a.STVDST = 1 and a.stfakt = 1
    AND a.STPLIS = 1 and a.stmoan = 201201
    and a.stkto = 1012
    and b.STVDST = 1 and b.stfakt = 1
    AND b.STPLIS = 2 and b.stmoan = 201201
    and b.stkto = 1012
    group by a.STKTO,
    a.STTENR,
    a.stmoan,
    b.STKTO,
    b.STTENR,
    b.stmoan

    der zweite Sum auf die Felder b.STWT01 und b.STWT02 ist in Ordnung ich hab zwei Datensätze und muss diese aufaddieren
    der erste Sum auf die Felder a.STWT01 und a.STWT02 darf ich nicht machen -> normalerweise ist davon nur ein Satz in der Tabelle, aber weil ich ja einen inner join mache
    habe ich den Satz öfters in der Tabelle. eigentlich müsste ich hier einen distinct machen weil ich den satz ja nur einmal sehen will :D geht glaube aber nicht

    als ergebnis habe ich folgenden inhalt


    1012 / 1 / 0.00 / 14000/ 201201/ 1012/ 1/ 20.00/ 10.000/
    201201
     
  4. ukulele

    ukulele Datenbank-Guru

    Und
    Code:
    SELECT a.STKTO,
    a.STTENR,
    max(a.STWT01) as plan_menge,
    max(a.STWT02) as plan_wert,
    a.stmoan,
    b.STKTO,
    b.STTENR,
    sum(b.STWT01) as ist_menge,
    sum(b.STWT02) as ist_wert,
    b.stmoan
    FROM (
    vwl01.sta01pf as a inner join vwl01.sta01pf as b
    on
    a.stfa = b.stfa and
    a.stabkz = b.stabkz and
    a.stwerk = b.stwerk and
    a.stsa09 = b.stsa09 and
    a.stbaun = b.stbaun and
    a.stst29 = b.stst29 and
    a.stkto = b.stkto
    )
    WHERE a.STVDST = 1 and a.stfakt = 1
    AND a.STPLIS = 1 and a.stmoan = 201201
    and a.stkto = 1012
    and b.STVDST = 1 and b.stfakt = 1
    AND b.STPLIS = 2 and b.stmoan = 201201
    and b.stkto = 1012
    group by a.STKTO,
    a.STTENR,
    a.stmoan,
    b.STKTO,
    b.STTENR,
    b.stmoan
    geht nicht? Alternativ zu max() kannst du auch mit min(), avg() arbeiten oder die Spalte in GROUP BY aufnehmen.
     
    PLSQL_SQL gefällt das.
  5. sascha0301

    sascha0301 Neuer Benutzer

    Das war zu einfach :D
    ich hab die spalten mit in den GROUP BY aufgenommen :)


    Vielen Dank
     
  6. ukulele

    ukulele Datenbank-Guru

    GROUP BY geht natürlich nur, wenn immer der selbe Wert dort steht. Sonst bekommst du mehrere Zeilen zurück.
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden