分组查询中含CAST的SQL除零错误解决咨询
解决SQL分组时的除以零错误
你遇到的问题核心是:按年月分组后,部分分组的SUM([Total Cost])为0,触发了除以零的SQL错误——不分组时整体数据的总和不为0,所以没报错;但拆分到年月维度后,小分组里可能出现总成本总和为0的情况,这时候除法运算就会直接报错。
用NULLIF就能解决这个问题,下面是具体的修改方案:
基础解决(保留NULL值)
把分母的SUM([Total Cost])用NULLIF包裹,当总和为0时自动转为NULL,避免除以零的错误:
, CAST(ROUND(100.0 * SUM(CASE WHEN Status = 'PASS' then [Total Cost] END) / NULLIF(SUM([Total Cost]), 0), 2) as DECIMAL(10,2))
进阶处理(替换NULL为默认值)
如果不想让结果显示NULL,想用默认值(比如0)替代,可以再加一层ISNULL:
, ISNULL(CAST(ROUND(100.0 * SUM(CASE WHEN Status = 'PASS' then [Total Cost] END) / NULLIF(SUM([Total Cost]), 0), 2) as DECIMAL(10,2)), 0)
简单说明
NULLIF(a, b):如果a等于b,返回NULL,否则返回a。这里就是把总和为0的情况转为NULL,从根源避免除以零。ISNULL(expr, default):如果expr是NULL,返回设置的默认值,否则返回expr本身,适合需要统一结果格式的场景。
内容的提问来源于stack exchange,提问作者Marcus
相关产品推荐
相关产品推荐

