SQL:当一列具有空值时,总计3列?

Yve*_*ves 65 sql

SELECT 
    sum(TotalHoursM)
          + (TotalHoursT)
          + (TotalHoursW)
          + (TotalHoursTH)
          + (TotalHoursF) 
          AS TOTAL
FROM LeaveRequest
Run Code Online (Sandbox Code Playgroud)

Mit*_*ers 95

如果列的值为0,那么你很好,我的猜测是你有一个Null值的问题,在这种情况下你需要使用IsNull(Column, 0)它来确保它始终为0.

  • "Yonita是迈克尔的回答,用你的复选标记回答了你的问号" - 我的大脑花了一个年龄来解析这句话. (37认同)
  • `IsNull`不可移植,问题没有指定数据库.请参阅下面的"COALESCE",它是便携式的(如果性能不是最佳的话). (3认同)
  • Yonita 是 Michael 的回答,使用复选标记回答了您的问号。 (2认同)
  • 问题出在SQL上,但指示的IsNull函数不是SQL原语. (2认同)

Jim*_*eri 65

使用该ISNULL功能的先前答案是正确的.该COALESCE功能也将起作用.在给定的示例中:

SELECT sum(COALESCE(TotalHoursM,0))
          + COALESCE(TotalHoursT,0)
          + COALESCE(TotalHoursW,0)
          + COALESCE(TotalHoursTH,0)
          + COALESCE(TotalHoursF,0) AS TOTAL FROM LeaveRequest
Run Code Online (Sandbox Code Playgroud)

这与ISNULL解决方案完全相同,唯一的区别是函数的名称.在SQL世界中存在一些"更好"的分歧.但两者都有效.我提交这个替代方案有两个原因.这COALESCE是ANSI标准,ISNULL而不是.但更重要的COALESCE是更灵活的事实. ISNULL只能使用两个参数.如果第一个参数为NULL,则返回第二个参数的值,否则返回第一个参数的值.COALESCE将取2到'n'(我不知道'n'的限制)参数并返回第一个参数的值NULL.当只有两个参数时效果相同ISNULL.

  • 只是我正在寻找的那个 - postgres没有isnull ether. (3认同)
  • 此外,Oracle SQL没有ISNULL。不过,以我的经验,使用NVL()可能会获得更好的结果:http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions105.htm (2认同)
  • Isnull在MySQL中没有像预期的那样工作.Coalesce完成了这项工作.谢谢. (2认同)

gju*_*ras 15

SELECT sum(isnull(TotalHoursM,0)) 
         + isnull(TotalHoursT,0) 
         + isnull(TotalHoursW,0) 
         + isnull(TotalHoursTH,0) 
         + isnull(TotalHoursF,0) 
AS TOTAL FROM LeaveRequest
Run Code Online (Sandbox Code Playgroud)


小智 6

仅供参考,MySQL的等效语句是:IFNull(Column,0).

如果不为null,则此语句将作为列值进行求值,否则将其计算为0.


Col*_*lin 5

您可以使用ISNULL

ISNULL(field, VALUEINCASEOFNULL)
Run Code Online (Sandbox Code Playgroud)