SQL的case when 不可重叠
SQL的case when 不可重叠;
SQL的case when 其子条件是互斥的,如果存在重叠,就会优先排定前面的;
如果需要重叠,暂时就不用case when ,可以直接用union all 解决;
BUG 重现;
select *
,case
when ds between '20201125' and '20201205' then '1125~1205'
when ds between '20201202' and '20201211' then '1202~1211'
else '其他' end as weekly_range
from (select date_id as ds
,date
from dim_calendar )t
where ds between '20201125' and '20201212'
结果
可以明显看到:1202、1203、1204、1205 这几个日期重叠了,会优先被判定到1125~1205这个范围内;
因此:如果使用 case when 子条件不能有重叠,如有重叠,就会导致意向不到的结果;