SQL: sum 3 colonnes lorsqu’une colonne a une valeur nulle?

SELECT sum(TotalHoursM) + (TotalHoursT) + (TotalHoursW) + (TotalHoursTH) + (TotalHoursF) AS TOTAL FROM LeaveRequest 

Si la colonne a une valeur 0, vous êtes d’accord, je suppose que vous avez un problème avec une valeur Null, dans ce cas vous devez utiliser IsNull(Column, 0) pour vous assurer qu’il est toujours 0 au minimum.

Les réponses précédentes utilisant la fonction ISNULL sont correctes. La fonction COALESCE fonctionnera également. Dans l’exemple donné:

 SELECT sum(COALESCE(TotalHoursM,0)) + COALESCE(TotalHoursT,0) + COALESCE(TotalHoursW,0) + COALESCE(TotalHoursTH,0) + COALESCE(TotalHoursF,0) AS TOTAL FROM LeaveRequest 

Ceci est identique à la solution ISNULL , la seule différence étant le nom de la fonction. Il existe un certain désaccord dans le monde SQL à propos de ce qui est «meilleur». Mais les deux fonctionnent. Je soumets cette alternative pour deux raisons. La COALESCE est la norme ANSI et ISNULL ne l’est pas. Mais plus important est le fait que COALESCE est plus flexible. ISNULL ne fonctionnera qu’avec deux parameters. Si le premier paramètre est NULL, la valeur du deuxième paramètre est renvoyée, sinon la valeur du premier est renvoyée. COALESCE prendra 2 à ‘n’ (je ne connais pas la limite de ‘n’) parameters et retourne la valeur du premier paramètre qui n’est pas NULL . Lorsqu’il n’y a que deux parameters, l’effet est identique à ISNULL .

 SELECT sum(isnull(TotalHoursM,0)) + isnull(TotalHoursT,0) + isnull(TotalHoursW,0) + isnull(TotalHoursTH,0) + isnull(TotalHoursF,0) AS TOTAL FROM LeaveRequest 

À titre de référence, l’instruction équivalente pour MySQL est: IFNull (Column, 0) .

Cette instruction est évaluée comme la valeur de la colonne si elle n’est pas nulle, sinon elle est évaluée à 0.

Vous pouvez utiliser ISNULL :

 ISNULL(field, VALUEINCASEOFNULL) 

Vous pouvez aussi utiliser nvl(Column,0)

On dirait que vous voulez sumr toutes les colonnes (je ne sais pas d’où vient la sum de 3 colonnes), pas seulement TotalHoursM, alors essayez ceci:

 SELECT SUM( ISNULL(TotalHoursM ,0) + ISNULL(TotalHoursT ,0) + ISNULL(TotalHoursW ,0) + ISNULL(TotalHoursTH ,0) + ISNULL(TotalHoursF ,0) ) AS TOTAL FROM LeaveRequest 

Je voudrais essayer ceci:

 select sum (case when TotalHousM is null then 0 else TotalHousM end) + (case when TotalHousT is null then 0 else TotalHousT end) + (case when TotalHousW is null then 0 else TotalHousW end) + (case when TotalHousTH is null then 0 else TotalHousTH end) + (case when TotalHousF is null then 0 else TotalHousF end) as Total From LeaveRequest 

Si vous voulez éviter la valeur NULL, utilisez IsNull (Column, 1)