[英]Divide by zero error in Sql View
每次實現我的select語句的這一部分,我都會得到一個被零除的異常。 我嘗試用NUllIF替換ISNULL。 同樣的錯誤。 這是我的代碼:
isnull([Balance], 0) * isnull(sce.tradepoundsperunit, 0) * (isnull(limitallocation_limitcommodity.priceperpound, 0) / CASE WHEN ISNULL(limit_limitcommodity.priceperpound, 1) = 0 THEN 1 ELSE ISNULL(limit_limitcommodity.priceperpound, 1) END ) / isnull(CASE WHEN ISNULL(l.PoundsPerUnit, 1) = 0 THEN 1 ELSE ISNULL(l.PoundsPerUnit, 1) END * ISNULL(targetu.bushelsperunit, 1) ,1)
AS Limitconvertedbalance,
我認為以下任何條款:ISNULL(limit_limitcommodity.priceperpound,1)ISNULL(l.PoundsPerUnit,1)ISNULL(targetu.bushelsperunit,1)
可能返回0,因為您只檢查null而不是零。 例如,如果l.PoundsPerUnit = 0,則檢查ISNULL(l.PoundsPerUnit,1)仍將返回零。
我認為這樣的事情應該可以解決您的問題。 它不檢查null而是檢查所有分母是否為null或零,並插入1。
isnull([Balance],0) *
isnull(sce.tradepoundsperunit,0) *
(
isnull(limitallocation_limitcommodity.priceperpound,0)
/
CASE
WHEN limit_limitcommodity.priceperpound IS NULL OR limit_limitcommodity.priceperpound=0 THEN 1
ELSE limit_limitcommodity.priceperpoind
END
) /
(
CASE
WHEN l.PoundsPerUnit IS NULL OR l.PoundsPerUnit =0 THEN 1
ELSE l.PoundsPerUnit
END *
CASE
WHEN targetu.bushelsperunit IS NULL OR targetu.bushelsperunit=0 THEN 1
ELSE targetu.bushelsperunit
END
)
AS Limitconvertedbalance,
我相信答案可能就是這樣:
* ISNULL(targetu.bushelsperunit, 1)
如果targetu.bushelsperunit為0,則代碼在執行前一個/之前可能正在執行*,導致被0除。該字段是否意味着在分母中?
嘗試使用“ nvl”功能。 像nvl(yourfield,0)
您應該檢查/
后面的語句,因為CASE WHEN
語句可能會導致零。 請使用另一種CASE WHEN
來確保/
之后沒有零/
也請注意*
因為它可能會使結果零,在您不期望的地方!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.