SQL GROUP BY CASE语句以避免错误输出

时间:2010-11-11 19:24:26

标签: sql sql-server sql-server-2005 aggregate-functions

我正在尝试在SELECT列表中编写以下case语句:

CASE
    WHEN SUM(up.[Number_Of_Stops]) = 0 THEN 0
    ELSE SUM(up.[Total_Trip_Time] / up.[Number_Of_Stops])
END

尽管如此,我仍然通过零错误获得分配。这是本案例陈述的全部要点,以避免这种情况。还有其他想法吗?

2 个答案:

答案 0 :(得分:3)

零检查基于SUM,一个聚合函数,这意味着它不是每行执行 - 这是分割发生的时间。

在将SUM应用于结果之前,您将不得不查看GROUP BY子句,或在子查询中运行除法(和零检查)。 IE:

SELECT SUM(x.result)
  FROM (SELECT CASE
                 WHEN up.[Number_Of_Stops]) > 0 THEN 
                    up.[Total_Trip_Time] / up.[Number_Of_Stops] 
                 ELSE 
                    0
               END AS result
          FROM TABLE) x

答案 1 :(得分:3)

您正在检查与导致错误的情况不同的情况。注意:

WHEN SUM(up.[Number_Of_Stops]) = 0

只有在分组中的所有记录都有Number_Of_Stops = 0时才会为真。当不是这种情况时,但某些记录Number_Of_Stops = 0,你将除以零。

相反,试试这个:

SUM(CASE 
        WHEN up.[Number_Of_Stops] = 0 THEN 0 
        ELSE up.[Total_Trip_Time] / up.[Number_Of_Stops] 
    END)