SQL:总和3列时,一列有一个空值?
SELECT sum(TotalHoursM) + (TotalHoursT) + (TotalHoursW) + (TotalHoursTH) + (TotalHoursF) AS TOTAL FROM LeaveRequest
如果列有一个0值,那么你很好,我的猜测是你有一个Null值的问题,在这种情况下,你需要使用IsNull(Column, 0)
来确保它始终为0。
以前使用ISNULL
函数的答案是正确的。 COALESCE
function也将起作用。 在给出的例子中:
SELECT sum(COALESCE(TotalHoursM,0)) + COALESCE(TotalHoursT,0) + COALESCE(TotalHoursW,0) + COALESCE(TotalHoursTH,0) + COALESCE(TotalHoursF,0) AS TOTAL FROM LeaveRequest
这与ISNULL
解决scheme完全相同,唯一的区别是function的名称。 在SQL世界里有一些分歧是“更好”的。 但是这两个工作。 我提交这个select有两个原因。 COALESCE
是ANSI标准, ISNULL
不是。 但是,更重要的是COALESCE
更灵活。 ISNULL
只能使用两个参数。 如果第一个参数是NULL,则返回第二个参数的值,否则返回第一个参数的值。 COALESCE将采取2到'n'(我不知道'n'的限制)参数,并返回非NULL
的第一个参数的NULL
。 当只有两个参数时,效果与ISNULL
相同。
SELECT sum(isnull(TotalHoursM,0)) + isnull(TotalHoursT,0) + isnull(TotalHoursW,0) + isnull(TotalHoursTH,0) + isnull(TotalHoursF,0) AS TOTAL FROM LeaveRequest
仅供参考,MySQL的等价语句是:IFNull(Column,0) 。
如果该列的值不为空,则该语句评估为列值,否则评估为0。
你可以使用ISNULL
:
ISNULL(field, VALUEINCASEOFNULL)
看起来像你想汇总所有的列(我不知道“总和3列”来自哪里),不只是TotalHoursM,所以试试这个:
SELECT SUM( ISNULL(TotalHoursM ,0) + ISNULL(TotalHoursT ,0) + ISNULL(TotalHoursW ,0) + ISNULL(TotalHoursTH ,0) + ISNULL(TotalHoursF ,0) ) AS TOTAL FROM LeaveRequest
我会试试这个:
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
如果要避免使用空值,请使用IsNull(Column,1)
你也可以使用nvl(Column,0)