我正在尝试在SELECT列表中编写以下case语句:
CASE
WHEN SUM(up.[Number_Of_Stops]) = 0 THEN 0
ELSE SUM(up.[Total_Trip_Time] / up.[Number_Of_Stops])
END
尽管如此,我仍然通过零错误获得分配。这是本案例陈述的全部要点,以避免这种情况。还有其他想法吗?
答案 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)