簡體   English   中英

在SQL視圖中除以零錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM