#对于同一字段按照不同状态分别排序
在很多查询下我们可能遇到这样的需求,需要根据一个字段不同的状态排序。比如现有一张表 t_test 。这张表有id,is_complete,update_time,desc字段。其中is_complete 字段关联一张字典表,状态分别为(0 未办结; 1 已办结;), 我们需要对已办结和未办结分别排序。即如果是已办结状态,则按照update_time(日期类型)倒序排列,如果是未办结状态则按照update_time(日期类型)正序排列。办结状态按照正序排列。那么 我们可以通过虚拟两个字段解决。
select id,is_complete,update_time,desc
case when is_complete=0 then update_time
else to_date('2099-01-01 00:00:00','yyyy-mm-dd hh24:mi:ss')
end as sortAsc,
case when is_complete=1 then update_time
else to_date('1900-01-01 00:00:00','yyyy-mm-dd hh24:mi:ss')
end as sortDesc
from
t_test
order by sortAsc asc,sortDesc desc;
就是虚拟了两个字段 sortAsc, sortDesc。
当然也可以通过java代码处理,但更多的时候牵扯到分页问题,使用sql解决是不是更方便一些。
更多数据库有趣sql用法,欢迎讨论。