如flag列的值有0,1,2;现要排序,按1,0,2的顺序来排,怎么排?显然,用order by flag asc或desc都行不通。
方法是使用case when的方式把值重新设置,根据这个新的字段排序即可。
如下:
select flag, case flag when 1 then 1000 -- flag=1时把值设为1000 when 0 then 999 -- flag=0时把值设为999 end as newFlag -- 重命名为newFlag字段 from tab order by newFlag desc -- 按newFlag排序
同样,如果字段存的是字符串,也可以通过case when的这种方式赋值“生成一个新字段”,达到随心所欲排序的目的。
在MySql中测试通过;由于手上没有Sql Server,没测这个数据库。
之前工作中遇到的一个类似问题的解决方案,记录下。