Benutzer mit den meisten Antworten
Nicht gefundene Werte als NULL zurückgeben

Frage
-
Hallo alle,
ich möchte zu einer Sammlung von Betriebsaufträgen, die letzte Rückmeldung zurückgeben. Problem dabei ist, dass es Betriebsaufträge gibt, auf denen noch nichts zurückgemeldet wurde.
Das Skript sieht s aus:
DECLARE @verkauf table(num3 bigint, num2 varchar(15), art int,name varchar(60), pwert float, kname1 varchar(60), banummer bigint, tabnr int, lastrm bigint, fertstand float); WITH ba AS (SELECT a.num26,a.yverw,a.yart,MAX(b.tabnr) AS tabnr FROM [dkw-net].dbo.eks_faarchiv AS a INNER JOIN [dkw-net].dbo.eks_faapos AS b ON a.num26=b.num26 WHERE ytsterm>'20110101' GROUP BY a.num26,a.yverw,a.yart), allerm AS (SELECT num9/1000 AS banum, num9 AS rm FROM eks_rueckmel WHERE (vom BETWEEN '20110101' AND '20120226') AND left(num9,1)='9'), letzterm AS (SELECT banum, MAX(rm) AS lastrm ,ISNULL(CAST(right(MAX(rm),3) AS float)/CAST(ba.tabnr AS float),0) AS fertstand FROM allerm INNER JOIN ba ON banum=ba.num26 GROUP BY banum,ba.tabnr) INSERT INTO @verkauf SELECT a.num3,a.num2,a.art,a.name,a.pwert,a.kname1 ,b.num26 ,b.tabnr ,c.lastrm ,c.fertstand FROM qry_eks_verkauf as a INNER JOIN ba AS b ON a.num3=b.yverw AND a.art=b.yart INNER JOIN letzterm AS c ON b.num26=c.banum WHERE (a.typ='Auftrag' AND a.limge>0) AND (a.num2 NOT LIKE '71%' AND a.num2 NOT LIKE '1%000' AND a.num2 NOT LIKE '2%000' AND a.num2 != '25') AND a.vom>'20110101'; select * from @verkauf;
Erläuterung:
Die CTE "ba" holt die Betriebsaufträge, die CTE "allerm" holt Rückmeldungen, "letzterm" sucht die letzte Rückmeldung zu jedem Betriebsauftrag. Zum Schluss wird die Ergebnismenge noch durch die aktiven Aufträgen gefiltert.
Bei "letzterm" beginnen die Probleme. Gibt es keine Rückmeldung, so gibt "letzterm" auch keine Zeile zurück. Wie kann ich es also so gestalten, dass dann die Spalten lastrm und fertstand als NULL zurückgegeben werden?
Grüße
Heiko
Antworten
-
- Als Antwort markiert Heiko Sturm Freitag, 9. März 2012 08:29
Alle Antworten
-
- Als Antwort markiert Heiko Sturm Freitag, 9. März 2012 08:29
-
Das ist der Sinn von OUTER JOINS, hier bei LEFT eben "nimm alles aus der linken Tabelle und von der rechten nur die matchend Datensätze, sonst liefere ein leeres Ergebnis"
Olaf Helper
* cogito ergo sum * errare humanum est * quote erat demonstrandum *
Wenn ich denke, ist das ein Fehler und das beweise ich täglich
Blog Xing