我有一个等式
( ( 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
答案 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