2016-11-04 60 views
1

我一直得到零除錯誤。我在這裏讀了幾個答案,但也許我以錯誤的方式使用它。 任何幫助表示讚賞。除以零的問題

看看我現在在這裏:

,cast(round((((Select JCCM.ContractAmt) 
    - 
((Select (sum (JCCP.CurrEstCost)) 
    From JCCP 
    Where JCCP.Job = JCCM.Contract))) 
    /
(Select JCCM.ContractAmt) *100),2) as numeric (36,2)) as 'Estimated Gross Profit (Loss) %' 

謝謝!

+0

什麼結果你要發送回的情況下,分母是假設爲零? –

+0

確認'JCCM.ContractAmt'全部爲非零值,或對分母做一個'ISNULL'。 –

+0

Tim,如果值爲0,則返回' - '或0%Rudy,並非全部爲零,只有少數爲 – marizolclark

回答

0

確認JCCM.ContractAmt都非零值

或做ISNULL上分母

WHERE添加此;無論是ISNULLJCCM.ContractAmt > 0

+1

太愚蠢了。我從來沒有想過where子句> 0。謝謝!這確實奏效。但我希望它顯示即使0.如何將isnull正確放置? – marizolclark

+0

很高興幫助:) –

0

我猜JCCM.ContractAmt是合同金額,因此,如果合同金額爲0那麼「估算毛利(虧損)%」必須是零(假設公司沒有任何CurrEstCost有前合同金額)。

所以,你可以在一個case語句把這個包起來,像這樣:

, CASE ISNULL(JCCM.ContractAmt,0)=0 THEN 0 
     ELSE 
     cast(round((((Select JCCM.ContractAmt) 
     - 
     ((Select (sum (JCCP.CurrEstCost)) 
     From JCCP 
     Where JCCP.Job = JCCM.Contract))) 
     /
     (Select JCCM.ContractAmt) *100),2) as numeric (36,2)) 
    END 
as 'Estimated Gross Profit (Loss) %'