Null-Wert bei Abfrage

Cr4m0

Benutzer
Beiträge
22
Moin,

ich habe folgende Abfrage geschrieben:

select CONVERT(NVARCHAR, A.Anlagedatum, 104) as Datum,
count(DISTINCT A.Vertriebsbeleg) as Anzahl_Auftraege ,
CAST(sum(A.Nettowertohnefrachtkosten) as money) as Auftragswert,
W.Temperatur,
W.Feuchtigkeit,
W.Windgeschwindigkeit,
W.Niederschlag,
W.Bewoelkung,
W.Event
from tabelle.Auftraege A,
tabelle.wetterdaten W,
tabelle.Kundenstamm K
where A.Anlagedatum = W.Datum
and K.Kunde =A.Kunde
and A.KundenartMarketing = 'mk'
and A.Verkaufsorganisation = '1000'
and YEAR(A.Anlagedatum) = 2013 -- !!!
and W.Standort = 'Düsseldorf'
and K.Bundesland in ('Nordrhein Westfalen','Hessen','Rheinland Pfalz','Saarland')
group by A.Anlagedatum,W.Temperatur,W.Feuchtigkeit,W.Windgeschwindigkeit,W.Niederschlag,W.Bewoelkung,W.Event
order by A.Anlagedatum;

Wenn es für ein Datum nun keine Aufträge gibt, dann bekomme ich für das jeweilige Datum kein Ergebnis geliefert. Das wird dann mühsam beim Auswerten. Kann mir jemand sagen wie ich das Problem lösen kann?
 
Werbung:
Wenn es für ein Datum nun keine Aufträge gibt, dann bekomme ich für das jeweilige Datum kein Ergebnis geliefert. Das wird dann mühsam beim Auswerten. Kann mir jemand sagen wie ich das Problem lösen kann?

Wenn es für ein Datum keine Aufträge gibt kannst du kein Ergebnis bekommen. Warum stellt das ein Problem dar?
Die Kurve krieg ich nicht.
Wenn es nur darum geht das undatierte Aufträge in einer Statistik fehlen kannst du ein default-Datum einsetzen.

Stichwort: COALESCE() (besonders beim where Kriterium) oder ISNULL()
 
Ja das ist richtig. Da es aber für jedes Datum Wetterdaten gibt, möchte ich das die Wetterdaten ausgegeben werden und für die Anzahl der Aufträge "0" ausgegeben wird.
 
Ich habe nun folgendes Statement geschrieben:

select CONVERT(NVARCHAR, W.Datum, 104) as Datum,
ISNULL(count(DISTINCT A.Vertriebsbeleg),0) as Anzahl_Auftraege ,
ISNULL(CAST(sum(A.Nettowertohnefrachtkosten) as money),0) as Auftragswert,
W.Temperatur,
W.Feuchtigkeit,
W.Windgeschwindigkeit,
W.Niederschlag,
W.Bewoelkung,
W.Event
from tabelle.Auftraege A,
tabelle.wetterdaten W,
tabelle.Kundenstamm K
where A.Anlagedatum = W.Datum
and K.Kunde =A.Kunde
and A.KundenartMarketing = 'mk'
and A.Verkaufsorganisation = '1000'
and YEAR(A.Anlagedatum) = 2013 -- !!!
and W.Standort = 'Düsseldorf'
and K.Bundesland in ('Nordrhein Westfalen','Hessen','Rheinland Pfalz','Saarland')
group by W.Datum,W.Temperatur,W.Feuchtigkeit,W.Windgeschwindigkeit,W.Niederschlag,W.Bewoelkung,W.Event
order by W.Datum;

Leider bekomme ich für die Wetterdaten ohne Aufträge immernoch keine Daten.
 
Werbung:
Du solltest unbedingt mit expliziten Joins arbeiten und nicht einfach alle Tabellen zusammen pappen. Dann könntest du z.B. auch die Aufträge auf die Wetterdaten joinen, das könnte dein Problem lösen.
Code:
SELECT   CONVERT(NVARCHAR, A.Anlagedatum, 104) as Datum,
     count(DISTINCT A.Vertriebsbeleg) as Anzahl_Auftraege,
     CAST(sum(A.Nettowertohnefrachtkosten) as money) as Auftragswert,
     W.Temperatur,
     W.Feuchtigkeit,
     W.Windgeschwindigkeit,
     W.Niederschlag,
     W.Bewoelkung,
     W.[Event]
FROM   tabelle.wetterdaten W
LEFT JOIN tabelle.Auftraege A
ON     W.Datum = A.Anlagedatum
LEFT JOIN tabelle.Kundenstamm K
ON     A.Kunde = K.Kunde
WHERE   A.KundenartMarketing = 'mk'
and A.Verkaufsorganisation = '1000'
and YEAR(A.Anlagedatum) = 2013 -- !!!
and W.Standort = 'Düsseldorf'
and K.Bundesland in ('Nordrhein Westfalen','Hessen','Rheinland Pfalz','Saarland')
group by A.Anlagedatum,W.Temperatur,W.Feuchtigkeit,W.Windgeschwindigkeit,W.Niederschlag,W.Bewoelkung,W.[Event]
order by A.Anlagedatum;
Ohne Beispieldatensätze läßt sich aber nicht so genau sagen was raus kommt, die Richtung sollte stimmen.
 
Zurück
Oben