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'

结果

image-20201223162150153

可以明显看到:1202、1203、1204、1205 这几个日期重叠了,会优先被判定到1125~1205这个范围内;

因此:如果使用 case when 子条件不能有重叠,如有重叠,就会导致意向不到的结果;


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM