SQL Inner join 2 Tabellen

sascha0301

Neuer Benutzer
Beiträge
3
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 =)
 
Werbung:

PLSQL_SQL

Datenbank-Guru
Beiträge
176
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
 

sascha0301

Neuer Benutzer
Beiträge
3
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
 

ukulele

Datenbank-Guru
Beiträge
4.394
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.
 
Werbung:

ukulele

Datenbank-Guru
Beiträge
4.394
GROUP BY geht natürlich nur, wenn immer der selbe Wert dort steht. Sonst bekommst du mehrere Zeilen zurück.
 
Oben