Databases Reference
In-Depth Information
Diesen Select fügen Sie als weitere Unterabfrage in die vorherige Abfrage der Bestelldaten
ein. Allerdings muss die Berechnung nach Monaten vorerst aus den Bestelldaten herausge-
nommen werden.
Der gültige Select für die Bestelldaten sieht jetzt wie folgt aus.
Select a.IRID, a.Datum, a.Bestellung, a.Artikelmenge, a.Gesamtsumme
from
(SELECT c.riskID IRID,s.postingDate Datum,s.orderNo Bestellung,
cast (sum (s.quantity)as DECIMAL(10,0))Artikelmenge,
cast (sum (s.amount)as DECIMAL(10,2))Gesamtsumme
from [dbo].[iw_sales]s,[dbo].[iw_customer]c
where s.customerNo = c.customerNo
and s.type = 2
group by c.riskID,s.postingDate,s.orderNo)a,
(SELECT c.riskID IRID, min (s.postingDate) Erstbestellung
FROM [dbo].[iw_sales]s,[dbo].[iw_customer]c
where s.customerNo = c.customerNo
and s.type = 2
group by c.riskID)b
where a.IRID = b.IRID
and a.Datum = b.Erstbestellung
Wenn Sie beide Abfragen mit einem normalen
JOIN
verbinden würden, bekämen Sie nur
die Daten von Kunden geliefert, die auch Retouren haben. Wir wollen aber alle Neukunden
ausweisen, also auch diejenigen, die nichts retourniert haben. Dazu benötigen wir einen
OUTER
JOIN
für die Verbindung der Unterabfragen. Es gibt drei Varianten des
OUTER
JOINS
(siehe Abschnitt 8.1, „Retourendaten und Retouren-Kopfdaten: Zwei Tabellen miteinander
verbinden“).
In diesem Fall ist die Variante
LEFT
OUTER
JOIN
richtig. Wenn man beide Tabellen, die man
mit einem
OUTER JOIN
verbinden möchte, nebeneinander stellt, steht die erste Tabelle
links. In unserem Fall enthält die erste Tabelle mehr Informationen als die zweite. Wenn es
also
NULL
-Einträge im Ergebnis gibt, stammen sie aus der zweiten Tabelle.
SELECT * FROM TABELLE_A a
LEFT OUTER JOIN TABELLE_B b
ON a.SPALTEN_NAME = b_SPALTEN_NAME
Bild 11.7■
Let Outer Join
Das Prinzip ist in Bild 11.7 dargestellt. Anstelle der Tabelle A setzen wir den Select für die
Bestelldaten, Tabelle B steht für die Retourendaten. Bei einem
LEFT
OUTER
JOIN
werden
nun sämtliche Bestelldaten sowie die vorhandenen Daten aus den Retouren verwendet. Sind
zu einzelnen Bestellungen keine Retouren vorhanden, werden
NULL
-Werte zurückgegeben.