如何用SQL CASE语句按优先级置零其余列解决汇总错误?
用SQL CASE语句实现按优先级重置列值
完全可以用CASE语句实现你的需求,核心是给每个列单独写判断逻辑,并且优先判断column A的条件,因为A的优先级高于B。
假设你的表名为your_table,以下是具体的SQL代码:
SELECT -- 处理column A:A>0时保留原值;B>0(此时A<=0)时置0;否则保留原值 CASE WHEN column_a > 0 THEN column_a WHEN column_b > 0 THEN 0 ELSE column_a END AS column_a, -- 处理column B:A>0时置0;B>0时保留原值;否则保留原值 CASE WHEN column_a > 0 THEN 0 WHEN column_b > 0 THEN column_b ELSE column_b END AS column_b, -- 处理column C:A>0或B>0时都置0;否则保留原值 CASE WHEN column_a > 0 OR column_b > 0 THEN 0 ELSE column_c END AS column_c, -- 处理column D:逻辑和C完全一致 CASE WHEN column_a > 0 OR column_b > 0 THEN 0 ELSE column_d END AS column_d FROM your_table;
逻辑说明
- 对于column A:先检查A是否大于0,满足就保留;如果A不大于0,再看B是否大于0,满足就把A置为0;都不满足就保留原A值。
- 对于column B:先检查A是否大于0(因为A优先级更高),满足就把B置为0;如果A不大于0,再看B是否大于0,满足就保留B;否则保留原B值。
- 对于column C和D:只要A>0或者B>0(因为A优先级更高,只要A满足就不用管B),就置为0;否则保留原值。
如果需要把处理后的数据写入新表或者更新原表,只需要把上述SELECT语句嵌套到INSERT INTO或者UPDATE语句中即可。
内容的提问来源于stack exchange,提问作者SQL Learner
相关产品推荐
相关产品推荐

