最近工作碰到客户的特殊要求,需要将特定的数据排序在前面,然后才按时间顺序排序,这个之前还真没有碰到过,好在有万能的度娘,搜索了一下,发现可以实现,使用order by decode语句即可。
对于order by熟悉SQL的朋友都知道了,而decode是oracle的函数,解释如下:
语法使用:DECODE(value, if1, then1, if2,then2, if3,then3, . . . else )
Value 代表某个表的任何类型的任意列或一个通过计算所得的任何结果。当每个value值被测试,如果value的值为if1,Decode 函数的结果是then1;如果value等于if2,Decode函数结果是then2;等等。事实上,可以给出多个if/then 配对。如果value结果不等于给出的任何配对时,Decode 结果就返回else 。
总结:简单来说就是if then的使用集合在一个函数中。有了这个函数,不但让SQL更简洁,而且可以应用到多处场合,今天说说应用于order by 之后,让指定内容排在前面。
例如有如下表TEST:
编号
姓名
年龄
分数
A001
小红
20
90
A002
小蓝
31
100
A003
小黑
27
98
A004
小白
35
93
A004
小紫
25
100
要求,25岁排序在前面,然后按分数排序,这时就需要使用order by decode语句了。
查询语句为:
SELECT * FROM TEST ORDER BY DECODE(年龄,25,分数)
查询结果如下:
这就是DECODE函数强大之处,在SQL SERVER或MY SQL等数据库,估计实现这样的排序会有点复杂,但ORACLE中只需要order by decode却可。
等等,别走! ^_^
好消息,快手官方发红包啦,登录即送2元,秒提现! 查看详情>>