Summierung und join

katergelb

Neuer Benutzer
Beiträge
2
Hallo, ich bin neu in diesem seh interessanten Forum und habe gleich eine Frage: Ich dachte erst trivial - aber komm nicht dahinter. Vielleicht kann mir jemand helfen:

--- Beispiel für View mit Summierung und Unterabfrage bzw. outer Join
--- ich möchte aus einer Abfrage wie unten einen view machen und den dann mit where-Einschränkung aufrufen,
--- muss diese also auf der oberen Ebene angeben können

create table t1
(t1a integer,
t1b integer)

create table t2
(t2a integer,
t2b integer,
t2x char(2))

insert into t1 values
(1,10),
(2,10),
(3,10),
(4,10)


insert into t2 values
(1,10,'X1'),
(2,10,'X2'),
(3,10,'X2'),
(1,11,'X1'),
(2,11,'X2'),
(3,11,'X2')


--- 1.1 Resultat falsch, t1b wird mehrfach summiert:
select t1a as a1, SUM (t1b) as sb1, SUM (t2b) as sb2
from t1
left outer join t2 on t2.t2A=t1.t1A
group by t1a

--- 1.2 man kann von außen filtern, aber sum(t1b) wird natürlich falsch s. 1.1
select t1a as a1, SUM (t1b) as sb1, SUM (t2b) as sb2
from t1
left outer join t2 on t2.t2A=t1.t1A
where t2.t2x='X2'
group by t1a


--- 2.1 Resultat richtig:
select t1a as a1, SUM (t1b) as sb1, sb2 = (select SUM (t2b) from t2 where t1A=t2A)
from t1
group by t1a

--- 2.2 mit Einschränkung im subselect:
select t1a as a1, SUM (t1b) as sb1, sb2 = (select SUM (t2b) from t2 where t1A=t2A and t2x='X2')
from t1
group by t1a
--- Resultat richtig aber ich komme von außen an die Einschränkung nicht ran im Subselect.

--- 2.3 so kann er t2 nicht binden:
select t1a as a1, SUM (t1b) as sb1, sb2 = (select SUM (t2b) from t2 where t1A=t2A)
from t1
where t2.t2x='X2'
group by t1a


Vielen Dank schonmal!
 
Werbung:
Entweder es liegt am Wochentag oder hier werden alle komisch. Weder verstehe ich dein Ziel, noch dein Problem, noch glaube ich das 1.1 ein "falsches" Resultat liefert.

Die Spaltennamen sind sehr abstrakt, was steht denn wo, was ist wo der PK oder der FK, in welchem Zusammenhang stehen die Tabellen?

zu 1.1)
Wenn du t1 auf t2 joinst und in t2 einem Datensatz in t1 mehrere Datensätze zugeordnet sind wird der Datensatz aus t1 mehrfach geliefert. Wenn du dann eine Spalte aus t1 summierst hast du natürlich eine andere Summe. Vielleicht suchst du
Code:
select t1a as a1, t1b as sb1, SUM (t2b) as sb2
from t1 
left outer join t2 on t2.t2A=t1.t1A 
group by t1a,t1b
Aber again, der Sinn ergibt sich aus dem Zusammenhang.
 
Werbung:
Vielen Dank für deine Antwort, ja, liegt sicher am Freitag. Du hats recht, das Ergebnis von t1 ist nicht falsch, aber halt nicht das benötigte. Der Select passt schon mal. Ich werde versuchen mein Anliegen deutlicher zu formulieren um den Zusammenhang klar zu machen..
 
Zurück
Oben