2015-09-14 22 views
0

我有一個生成的SQL查詢這就造成了「除以零」錯誤使用或者如果對解決「被零除」錯誤

雖然我我計算的一個動態SQL有CASE語句來檢查錯誤由於某種原因不起作用。

下面是計算公式:

CASE WHEN SUM(A) = 0 
    THEN 0 
    WHEN SUM(B) = 0 
    THEN 0 
    ELSE 
    SUM((C/B))/AVG(A) AS X 

我收到錯誤,因爲列具有它的零值。

你能幫幫...

+1

您正在檢查是否' SUM(A)'或'SUM(B)'爲零,但您除以'B'和'AVG(A)'的每個值。您不檢查* B的任何*值是否爲零,並且您沒有檢查「AVG(A)」是否爲零。 – Blorgbeard

回答

2

由於您使用的B每個值,而不是作爲SUM(B)除數,你應該檢查的B其中B = 0存在。這同樣適用於A,你應該檢查AVG(A)而不是SUM(A)

CASE 
    WHEN AVG(A) = 0 THEN 0 
    WHEN SUM(CASE WHEN B = 0 THEN 1 ELSE 0 END) > 0 THEN 0 
    ELSE SUM((C/B))/AVG(A) 
END AS X 
1

如果你要離開你現有的檢查到位,那麼你需要添加額外的檢查這樣的。您需要確保您沒有B的任何0值,您可能需要根據您的要求添加條件。

CASE WHEN SUM(A) = 0 
     THEN 0 
     WHEN SUM(B) = 0 
     THEN 0 
     WHEN EXISTS(SELECT 1 FROM YOURTABLE WHERE B=0) -- add WHERE here if you need to. 
     THEN 0 
     WHEN AVG(A)=0 
     THEN 0 
     ELSE 
     SUM((C/B))/AVG(A) 
    END AS X 
0

感謝您的意見和解答。雖然上述兩個答案似乎都沒有出於某種原因。

我最終行動使用下面的代碼片段來解決問題:

CASE 
    WHEN AVG(A) = 0 THEN 0 
    ELSE ISNULL(SUM ((C/NULLIF(B,0)))/AVG(A),0) 
END AS X 
3

你可以寫這樣簡單和排除CASE

ISNULL(SUM(C/NULLIF(B,0))/NULLIF(AVG(A),0),0) X 
相關問題