SQL CASE语句逻辑错误:分类5、6未触发全部归入分类1问题求助
问题根因
CASE WHEN 语句遵循顺序匹配原则,会从上到下依次校验条件,一旦某条条件匹配成功就直接返回对应结果,不会再执行后续的条件判断。
你写的分类1的条件 Sum(SubscriptLineAmount) > 0 and sum([Previous Amount]) = 0 完全包含了分类5、6的前置判断条件,所有符合5、6的数据首先会命中分类1的规则,自然不会走到后面的5、6判断逻辑。
修正方案
调整条件的先后顺序,把颗粒度更细、判断维度更多的5、6规则放到分类1前面即可,调整后的代码如下:
case when Sum(SubscriptLineAmount) > 0 and sum([Previous Amount]) = 0 and [SUBSCRIPTION ORDER TYPE LIST] = 'Acquisition' then 5 when Sum(SubscriptLineAmount) > 0 and sum([Previous Amount]) = 0 and [SUBSCRIPTION ORDER TYPE LIST] = 'Other' then 6 when Sum(SubscriptLineAmount) > 0 and sum([Previous Amount]) = 0 then 1 when Sum(SubscriptLineAmount) > 0 and Sum(differenceAmount) > 0 then 2 when Sum(SubscriptLineAmount) > 0 and Sum(differenceAmount) < 0 then 3 when Sum(SubscriptLineAmount) = 0 and Sum(differenceAmount) <> 0 then 4 else 7 end classification
额外注意事项
- 如果你当前是聚合查询(用到了sum聚合函数),
[SUBSCRIPTION ORDER TYPE LIST]字段需要加入到GROUP BY分组维度中,否则SQL会执行报错。 - 若你需要分类1专门对应
[SUBSCRIPTION ORDER TYPE LIST]既不是Acquisition也不是Other的场景,上述调整后的逻辑已经自动满足,因为这两类已经被前面的5、6规则拦截。
内容的提问来源于stack exchange,提问作者gagan
相关产品推荐
相关产品推荐

