it-swarm.com.de

Meine Select SUM-Abfrage gibt null zurück. Es sollte 0 zurückgeben

Ich versuche, Kundenguthaben mit der folgenden Abfrage zusammenzufassen:

select sum(balance) from mytable where customer = 'john' 

Wenn der Kunde jedoch keinen Kontostand hat (d. H. Keine übereinstimmenden Zeilen in der Tabelle mytable), gibt meine Abfrage null und nicht 0 zurück. Was ist das Problem?

37
nec tso

Versuche dies:

select COALESCE(sum(balance),0) from mytable where customer = 'john' 

Dies sollte die Arbeit erledigen. Die Coalesce-Methode sollte die 0 zurückgeben.

83
alwaysVBNET

Das ist kein Problem. Wenn keine Zeilen vorhanden sind, gibt sum()null zurück. Es wird auch null zurückgegeben, wenn alle Zeilen einen null Saldo haben.

Um stattdessen Null zurückzugeben, versuchen Sie Folgendes:

select isnull(sum(balance),0) from mytable where customer = 'john' 
13
Andomar
select coalesce(sum(coalesce(balance,0)),0) from mytable where customer = 'john' 
3
David Jashi

Vielleicht denken Sie an das Verhalten von COUNT?

COUNT(Field) gibt 0 zurück, aber SUM(Field) gibt NULL zurück, wenn keine übereinstimmenden Zeilen vorhanden sind.

Sie benötigen ein ISNULL oder COALESCE

COALESCE oder ISNULL

1
bendataclear

Versuche dies:

select sum(IsNull(balance,0)) from mytable where customer = 'john' 
0
Yuriy Galanter