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 子條件不能有重疊,如有重疊,就會導致意向不到的結果;
