2010-11-11 140 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