2013-06-11 12 views

risposta

52

Prova questa:

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

Questo dovrebbe fare il lavoro. Il metodo di coalesce dovrebbe restituire 0.

+3

COALESCE è molto meglio qui quindi isnull –

+0

@ScottSelby: come mai? AFAIK, 'isnull' è più prevedibile in quanto restituisce sempre il tipo di dati del primo argomento. – Andomar

+0

@Andomar "Un'espressione che coinvolge ISNULL con parametri non nulli è considerata NOT NULL, mentre le espressioni che coinvolgono COALESCE con parametri non nulli sono considerate NULL" - Io uso sempre COALESCE, prenderà sempre per null anche se il saldo non è annullabile –

8

Questo non è un problema. Se non ci sono righe, sum() restituirà null. Restituirà anche null se tutte le righe hanno un saldo null.

Per tornare a zero, invece, provare:

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

sarà anche restituire 'null' se una delle righe hanno un' equilibrio null' – pcv

+0

Questo è esattamente quello che avevo bisogno di sapere, cioè se 'null' viene restituito da' sum' nei casi in cui il numero di record è 0. +1 per dare la ragione del comportamento. –

1
select coalesce(sum(coalesce(balance,0)),0) from mytable where customer = 'john' 
+0

Questa sarebbe una correzione se l'OP utilizzava Oracle e se c'era un record con un saldo "nullo", al contrario di nessun record – Andomar

+0

Spiacente, non ho notato che usa SQL Server. Lo modifico per essere compatibile con la maggior parte delle implementazioni. –

+0

Avevo bisogno di mettere il wrapper COALESCE su SUM se non ci sono record e su MySQL. –

1

Prova questa:

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

Sarebbe una correzione se ci fosse un record con un saldo nullo, in contrapposizione a nessun record – Andomar

+0

'se il cliente non ha saldo' non era chiaro se non ci sono record O c'è un record ma il saldo è NULL –

1

Forse stai pensando ai comportamenti di COUNT?

COUNT(Field) restituirà 0 ma SUM(Field) restituisce NULL se non ci sono righe corrispondenti.

È necessario un ISNULL o COALESCE

COALESCE o ISNULL

+0

perché il rating? – bendataclear

+0

COUNT restituisce un valore diverso 0 - significa che ci sono zero righe corrispondenti alla query, se ci sono 2 righe conteggio restituirà 2, non la somma delle 2 righe –

+0

@ScottSelby, scusate forse non ero chiaro, intendevo che potrebbe ho pensato che 'COUNT' restituisse zero se non ci sono righe corrispondenti, non che' COUNT' è un sostituto di 'SUM'. – bendataclear

Problemi correlati