我有一個生成的SQL查詢這就造成了「除以零」錯誤使用或者如果對解決「被零除」錯誤
雖然我我計算的一個動態SQL有CASE語句來檢查錯誤由於某種原因不起作用。
下面是計算公式:
CASE WHEN SUM(A) = 0
THEN 0
WHEN SUM(B) = 0
THEN 0
ELSE
SUM((C/B))/AVG(A) AS X
我收到錯誤,因爲列乙具有它的零值。
你能幫幫...
我有一個生成的SQL查詢這就造成了「除以零」錯誤使用或者如果對解決「被零除」錯誤
雖然我我計算的一個動態SQL有CASE語句來檢查錯誤由於某種原因不起作用。
下面是計算公式:
CASE WHEN SUM(A) = 0
THEN 0
WHEN SUM(B) = 0
THEN 0
ELSE
SUM((C/B))/AVG(A) AS X
我收到錯誤,因爲列乙具有它的零值。
你能幫幫...
由於您使用的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
如果你要離開你現有的檢查到位,那麼你需要添加額外的檢查這樣的。您需要確保您沒有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
感謝您的意見和解答。雖然上述兩個答案似乎都沒有出於某種原因。
我最終行動使用下面的代碼片段來解決問題:
CASE
WHEN AVG(A) = 0 THEN 0
ELSE ISNULL(SUM ((C/NULLIF(B,0)))/AVG(A),0)
END AS X
你可以寫這樣簡單和排除CASE:
ISNULL(SUM(C/NULLIF(B,0))/NULLIF(AVG(A),0),0) X
您正在檢查是否' SUM(A)'或'SUM(B)'爲零,但您除以'B'和'AVG(A)'的每個值。您不檢查* B的任何*值是否爲零,並且您沒有檢查「AVG(A)」是否爲零。 – Blorgbeard