今天在改需求的时候发现客户需要将 故障的设备排列在最前面,而状态字段是Number类型,依次有:故障:2;告警:3;正常0;其他1;
现在的需求是要将2排列在最前面,于是发现不管采用 order by Asc 还是Desc 都无法满足需求(因为不管从大到小,还是从小到大,2 都是排列在中间的位置),故此需要对Order by 作一下处理了,必须要将2排列在前面,所以就想到用Case When来处理Order by 的结果:
select * from v_facilities_all_info order by case when run_status=2 then 0 when run_status=3 then 1 else 2 end
结果发现真的可以(好开心→_→)!!!
原理很简单,就是在排序的时候让状态本来为2的结果变成0,这样在排序的时候,按照升序的规则就可以排在前面,这里提醒大家,此方法只适用状态字段固定的情况下,若状态字段特别多,且无规则,就不建议这样的方法了,不过可以在此基础上进行修改,期待下次来钻研这个问题!