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

时间:2009-07-06 18:50:14

标签: sql

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

9 个答案:

答案 0 :(得分:91)

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

答案 1 :(得分:60)

使用ISNULL功能的先前答案是正确的。 COALESCE功能也可以使用。在给定的示例中:

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

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

答案 2 :(得分:15)

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

答案 3 :(得分:6)

Just for reference, the equivalent statement for MySQL is: IFNull(Column,0)

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

答案 4 :(得分:3)

您可以使用ISNULL

ISNULL(field, VALUEINCASEOFNULL)

答案 5 :(得分:1)

看起来你想要SUM所有列(我不确定“sum 3 columns”来自哪里),而不仅仅是TotalHoursM,所以试试这个:

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

答案 6 :(得分:1)

您也可以使用library(tm) data(crude) corp <- crude corp <- tm_map(corp, content_transformer(gsub), pattern="(?<=\\s|^)([a-z]+)(?=\\s|$|\\W)", replacement = " ", perl=T) corp <- tm_map(corp, content_transformer(gsub), pattern="\\d|\\W", replacement = " ", perl=T) corp <- tm_map(corp, content_transformer(gsub), pattern="\\s+", replacement = " ", perl=T) inspect(corp[[1]])

答案 7 :(得分:0)

我会试试这个:

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

答案 8 :(得分:0)

如果要避免使用空值,请使用IsNull(Column,1)