如何在SQL除法语句中使用ISNULL/NULLIF避免除零错误?
解决SQL除零错误的方案
方案1:返回NULL
当SUM(Y.[Sales])为0时,通过NULLIF将分母转为NULL,除法结果自动变为NULL,避免除零错误:
,(CAST(SUM(Y.[Profit]) AS DECIMAL (18,2)) / NULLIF(CAST(SUM(Y.[Sales]) AS DECIMAL (18,2)), 0)) AS 'AHT'
方案2:返回0
如果期望结果为0而非NULL,在整个除法表达式外层嵌套ISNULL,将NULL替换为0:
,ISNULL(CAST(SUM(Y.[Profit]) AS DECIMAL (18,2)) / NULLIF(CAST(SUM(Y.[Sales]) AS DECIMAL (18,2)), 0), 0) AS 'AHT'
逻辑说明
NULLIF(a, b):当a等于b时返回NULL,否则返回a。这里用来把总和为0的销售额转为NULL,避免触发除零错误。ISNULL(expr, replacement):当expr为NULL时返回replacement,否则返回expr。用来将除法得到的NULL替换为0(如果需要的话)。
内容的提问来源于stack exchange,提问作者Sergey Lykov
相关产品推荐
相关产品推荐

