SQL除以零错误nullif无效

时间:2015-10-25 18:52:35

标签: sql-server sql-server-2012

我有一个等式

( ( P.RealisedConsumption / ( NULLIF(( PO.ActualQty * P.QuantityPO ), 0) / 1000000 ) ) - 1 ) * 100 AS FibreScrapFactor

这适用于我正在查看的示例顺序。但是,如果我取出where子句(所以我有所有订单),我会得到零除错误。

如果我将/ 1000000限制为10然后我

( ( P.RealisedConsumption / ( NULLIF(( PO.ActualQty * P.QuantityPO ), 0) / 10 ) ) - 1 ) * 100 AS FibreScrapFactor

这适用于所有订单,但不正确我需要除以一百万。我怎样才能让它发挥作用?谢谢!

这也让我除以零错误

( ( P.RealisedConsumption / ( ( NULLIF(PO.ActualQty, 0) * NULLIF(P.QuantityPO, 0) ) / 1000000 ) ) - 1 ) * 100 AS FibreScrapFactor

2 个答案:

答案 0 :(得分:2)

我相信这是因为类型。您有嵌套的devision操作,如果列的类型为int且值小于1000000,那么由于内部操作,您将获得0。当您更改为10时,显然您不会获得0,因为在内部操作中乘法结果大于10

这将引发错误:

select 2 / (1 / 10)

解决方法只是将内部结果乘以1.0以生成数字类型的结果:

select 2 / (1 * 1.0 / 10)

答案 1 :(得分:1)

CASE WHEN (PO.ActualQty * P.QuantityPO / 1000000) <> 0 THEN
    ( P.RealisedConsumption / ( PO.ActualQty * P.QuantityPO / 1000000 ) - 1 ) * 100 
END AS FibreScrapFactor