SQL除以零错误遇到无法看到NULLIF放在哪里

时间:2016-09-23 10:33:29

标签: sql tsql

我正在编写一个查询并获得除零错误。我在使用单独的查询之前遇到此错误,但通常可以使用NULLIF语句修复它。

这次我真的很想摆脱NULLIF的错误,我不确定这是不是因为我把它放在了正确的位置。

这是我的代码,没有任何NULLIF语句:

Select
DATEPART(Year,C.CreatedDate),
DATENAME(Month,C.CreatedDate),
CASE WHEN D.UnitID = 'BOX' THEN
    D.QtyAffected * I.BCT_Product_Qty / (1 / (convert(decimal(18,3),T.Width) / 1000 * convert(decimal(18,3),T.Height) / 1000))
ELSE
    D.QtyAffected / (1 / (convert(decimal(18,3),T.Width) / 1000 * convert(decimal(18,3),T.Height) / 1000))
End as 'M2 Affected',
C.CostReplacementTile + C.CostRedelivery + C.CostCredit + C.CostRefixing + C.CostVoucher 'Cost'

From BCTComplaintRegister C

Left Join BCTComplaintProductRegister D
On D.CaseID = C.CaseID

Left Join InventTable I
On I.ItemID = D.ItemID

Left Join BCTTileSize T
On T.TileSizeID = I.BCTTileSize

Where 
--DATEDIFF(M,C.CreatedDate,GETDATE()) <= 1
C.CaseID = 'CE23294'

除以零错误与2个案例陈述有关,如果它不能执行除法,我只想返回零或其他东西。

任何人都可以帮我把NULLIF放在哪里?或者有更好的选择。

谢谢

1 个答案:

答案 0 :(得分:2)

你把它放在分母中:

CASE WHEN D.UnitID = 'BOX' THEN
    D.QtyAffected * I.BCT_Product_Qty /
     NULLIF(1 / (convert(decimal(18,3),T.Width) / 1000 * convert(decimal(18,3),T.Height) / 1000))
ELSE
    D.QtyAffected /
     NULLIF((1 / (convert(decimal(18,3),T.Width) / 1000 * convert(decimal(18,3),T.Height) / 1000))
END