如何正确用IFNULL包裹复杂CASE函数计算列以替换NULL为0
修复IFNULL用法的SQL表达式
你的问题出在IFNULL的包裹范围错误,当前写法仅将第一个CASE的计算部分放入IFNULL,后续的加法逻辑和末尾的,0)导致语法报错。要实现“将整个计算结果的NULL值替换为0”,需把两个CASE计算相加的完整表达式作为IFNULL的第一个参数,第二个参数设为0。
正确的SQL表达式(已将行业名称翻译为中文)如下:
IFNULL( (CASE WHEN A.Industry = '交通运输与仓储' THEN 26 WHEN A.Industry = '建筑业' THEN 19 WHEN A.Industry = '现场服务' THEN 26 WHEN A.Industry = '批发贸易' THEN 26 WHEN A.Industry = '制造业' THEN 30 WHEN A.Industry = '消费品' THEN 26 WHEN A.Industry = '零售贸易' THEN 26 WHEN A.Industry = '客运' THEN 25 WHEN A.Industry = '采矿、采石、石油与天然气' THEN 25 WHEN A.Industry = '食品与饮料' THEN 26 WHEN A.Industry = '公用事业' THEN 26 WHEN A.Industry = '医疗与社会救助' THEN 25 WHEN A.Industry = '政府' THEN 26 WHEN A.Industry = '教育服务' THEN 25 ELSE 254 END * Number_Of_Vehicles * 0.99) + (CASE WHEN A.Industry = '交通运输与仓储' THEN 34 WHEN A.Industry = '建筑业' THEN 32 WHEN A.Industry = '现场服务' THEN 33 WHEN A.Industry = '批发贸易' THEN 36 WHEN A.Industry = '制造业' THEN 39 WHEN A.Industry = '消费品' THEN 42 WHEN A.Industry = '零售贸易' THEN 31 WHEN A.Industry = '客运' THEN 32 WHEN A.Industry = '采矿、采石、石油与天然气' THEN 32 WHEN A.Industry = '食品与饮料' THEN 23 WHEN A.Industry = '公用事业' THEN 32 WHEN A.Industry = '医疗与社会救助' THEN 32 WHEN A.Industry = '政府' THEN 42 WHEN A.Industry = '教育服务' THEN 39 ELSE 32 END * Number_Of_Vehicles * 0.49), 0 )
关键说明:
- 调整IFNULL的包裹范围后,只要
Number_Of_Vehicles为NULL导致整个计算结果为NULL,就会自动替换为0,不破坏原有业务计算逻辑。 - 修复了原表达式的语法错误,确保SQL能正常运行。
内容的提问来源于stack exchange,提问作者emily porter
相关产品推荐
相关产品推荐

