需求背景是,需要用一个sql语句按照不同的数据状态进行一次排序,状态相同的情况下再按不同的时间字段排序,case when的解决思路是构建两个临时字段,命中不同的状态则获取对应的时间字段,不命中则返回null,以下为sql片段
select wa.id id,
wa.image_url imageUrl,
wa.activ_name activName,
wa.description description,
CASE
WHEN activ_status ='1' THEN registration_begin_time
WHEN activ_status ='2' THEN activity_begin_time
WHEN activ_status ='3' THEN activity_begin_time
WHEN activ_status ='0' THEN registration_begin_time
ELSE null
END ascTime,
CASE
WHEN activ_status ='5' THEN update_time
WHEN activ_status ='4' THEN update_time
ELSE null
END descTime,
wa.registration_begin_time registrationBeginTime,
wa.registration_end_time registrationEndTime,
wa.activity_begin_time activityBeginTime,
wa.activity_end_time activityEndTime,
wa.activ_status activStatus,
wa.address address,
wa.update_time updateTime
from wf_activ wa
where wa.del_flag = '0'
order by field(t.activStatus,'1','2','3','0','5','4'),t.ascTime asc,t.descTime desc