[英]Divide Zero error when calculating Sales % in SQL
我不斷收到以下錯誤消息:
消息 8134,級別 16,State 1,第 1 行遇到除以零錯誤。
我看過一些關於使用IFNULL
的帖子,我已經嘗試過。 例如:
,Case when a.DiscountReasonCode = 'RL' then IFNULL(((a.ORIGINALRETAIL-a.RetOne) / (a.ORIGINALRETAIL) * 100),0) end as [PctSB]
但這會返回以下錯誤:
'IFNULL' 不是可識別的內置 function 名稱。
我正在做的是嘗試計算正確的銷售百分比,然后找到並將其與表中已有的內容進行比較,以查找錯誤或丟失的銷售百分比。
我不確定我哪里出錯了,但任何幫助將不勝感激。
SELECT
a.packnum
,a.description
,a.CatID
,a.PctSavings
,Case when a.DiscountReasonCode = 'RL' then (a.ORIGINALRETAIL-a.RetOne) / (a.ORIGINALRETAIL) * 100
end as [PctSB]
FROM PIC704Current a Join CatalogInfo b ON (a.CatID = b.Catalog) and (a.Year = b.MailYear)
WHERE
b.MediaId in('CAT Catalog','SCAT Sale Catalog','SSTF Sale Statement Stuff','STUF Statement
Stuffer','PKG Package Insert','SPKG Sale Pkg Insert')
and a.DiscountReasonCode = 'RL'
and a.year >='2020'
and (Case when a.PctSavings <> (a.ORIGINALRETAIL-a.RetOne)/a.ORIGINALRETAIL*100 then 'False' else
'True' END) = 'False'
謝謝
您可以使用coalesce
或isnull
。 MySQL 使用ifnull
case
when a.DiscountReasonCode = 'RL' then (a.ORIGINALRETAIL-a.RetOne) /
NULLIF(a.ORIGINALRETAIL, 0) * 100
end as [PctSB]
消息 8134,級別 16,State 1,第 1 行遇到除以零錯誤。
此錯誤表明您的分母為 0,因此您可以使用 case 表達式將其更改為 NULL。
'IFNULL' 不是可識別的內置 function 名稱。
在 SQL 服務器中,可以使用ISNULL
或Coalesce
CASE WHEN a.DiscountReasonCode = 'RL'
THEN ISNULL(((a.ORIGINALRETAIL-a.RetOne)/(CASE WHEN a.ORIGINALRETAIL = 0
THEN NULL
ELSE a.ORIGINALRETAIL
END) * 100),0)
END AS [PctSB]
在 null 測試中包裝除法不會消除除以 0 錯誤。 相反,您需要檢查被除以的值是否為 0 並返回不同的值。 您可以使用IIF
執行此操作:
IIF(a.ORIGINALRETAIL = 0, 0, 100.0 * (a.ORIGINALRETAIL-a.RetOne) / a.ORIGINALRETAIL)
我認為您看到的提到IFNULL
的帖子實際上可能一直在提到NULLIF
,您只是記錯了。 避免 sqlserver 中出現 DIV/0 錯誤的典型技巧之一:
some_number / NULLIF(other_number_maybe_zero, 0)
如果除數為0,則轉換為null,意思是結果是null而不是錯誤
在標准 SQL 中,您也可以這樣做:
some_number / CASE WHEN other_number_maybe_zero = 0 THEN NULL ELSE other_number_maybe_zero END
只是有點啰嗦
您想要的邏輯由NULLIF()
提供:
(a.ORIGINALRETAIL - a.RetOne) * 100.0 / NULLIF(a.ORIGINALRETAIL, 0)) * 100) as [PctSB]
使用標准 SQL function NULLIF()
是做你想做的最簡單的方法,我建議你這樣寫邏輯。 它用NULL
替換任何0
值——從而避免被零除。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.