IsNull fängt kann Null nicht verhindern?

Hallo zusammen,

Habe in einer Abfrage folgendes Konstrukt stehen:

SUM ( CASE IsNull(Feld3,1) 
 WHEN 0 THEN IsNull(Feld4, 0) \* IsNull(Feld5, 0)
 ELSE IsNull(Feld4, 0) \* IsNull(Feld6 ,0)
 END

 ) OVER (PARTITION BY Feld1, Feld2) As NeuesFeld

bei einer detailierteren Abfrage stellte sich heraus, dass die Felder 3-6 allesamt NULL (Feld ohne Inhalt) sind.

Nach meinem Verständnis müsste die Summe dann 0 (die Zahl Null) ergeben. Stattdessen wird im Ergebnis NULL (Feld ohne Inhalt) ausgegeben.

Kann mir jemand erklären, was da los ist?

Ich benutze MS-SQL-Server 2005.

DANKE bereits im Voraus!

VG

Holger

Moin, Holger,

wie der Case genau arbeitet, weiß ich jetzt nicht, aber die Funktion IsNull liefert einen Boolean zurück. Passt das mit „When 0“ zusammen?

Gruß Ralf

Hallo Holger,

SUM() liefert ein leeres Ergebnis, wenn die Tabelle leer ist. Sobald die Tabelle mind. eine Zeile hat, egal ob mit NULL oder Werten belegt, liefert SUM() den erwarteten Wert.

Aus deiner Beschreibung entnehme ich, dass Feld1 und Feld2 Werte haben. Demnach sollte SUM() auch 0 liefern. Ich hab’s eben mit deinem Beispiel geprüft. Funktioniert prima bei mir. :wink:

Was immer das Problem ist, an SUM() kann es nicht liegen.

Peter

Hallo Peter,

erstmal danke für deine Mühe.

SUM() liefert ein leeres Ergebnis, wenn die Tabelle leer ist.
Sobald die Tabelle mind. eine Zeile hat, egal ob mit NULL oder
Werten belegt, liefert SUM() den erwarteten Wert.

Ja, die Summenfunktion ist, soweit ich das beurteilen kann,
auch nicht das Problem. Nach meiner Meinung tritt ein Fehler
im Zusammenspiel zwischen IsNull und SUM auf.

IsNull arbeitet korrekt. Das gleiche Konstrukt gibt es nochmals
ohne die Summerierung (für einzelne Datensätze). Da wird alles korrekt angezeigt. Nur in Kombination mit SUM funktioniert nix
mehr.

Aus deiner Beschreibung entnehme ich, dass Feld1 und Feld2
Werte haben. Demnach sollte SUM() auch 0 liefern.

Feld1 und Feld2 sind Primärschlüssel. Werden Sie in anderen
Tabellen als den jeweils Ursprünglichen gespeichert, besteht
referentielle Integrität über Foreign-Key-Constraints.

NULL-Werte sind für Feld1 und Feld2 ausgeschlossen.

Ich hab’s
eben mit deinem Beispiel geprüft. Funktioniert prima bei mir.
:wink:

Bei mir halt nicht :smile:

VG

Holger

Hallo Ralf,

auch an dich erst einmal ein Dankeschön für deine Mühe.

In der Sache musss ich aber widersprechen. IsNull(NULL, Ersatzwert) liefert den Ersatzwert und keinen Boolean!

VG

Holger