除以零问题

时间:2016-11-04 13:51:55

标签: sql-server-2012

我一直被零误差所分割。我已经在这里阅读了几个答案,但也许我以错误的方式使用它。 任何帮助表示赞赏。

看看我现在有什么:

,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) %'

谢谢!

2 个答案:

答案 0 :(得分:0)

确认JCCM.ContractAmt都是非零值

或在分母上做一个ISNULL

或在WHERE中添加; ISNULLJCCM.ContractAmt > 0

答案 1 :(得分: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) %'