2010-11-11 81 views
1

我试着写下面的case语句在我的SELECT列表:SQL GROUP BY CASE语句aviod示数出

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

我保持零次失误越来越divde虽然。这是为了避免这种情况,本案件陈述的重点。任何其他想法?

回答

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) 
3

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

您将不得不查看GROUP BY子句,或者在将SUM应用于结果之前,在子查询中运行除法(和零检查)。 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 
+0

,如果[NUMBER_OF_STOPS]可能为NULL,请确保你搞定了。 – Bill 2010-11-11 19:36:05

+0

@ Bill:是的,好点。 – 2010-11-11 19:37:08