大家都知道在SQL语句中,我们一般使用ORDER BY 来排序SQL输出的结果,可以使用ASC(默认)指定升序排列,DESC指定降序排列,比如
>>select a,b from test order by a asc, b asc;
A B
----------- ----------
1 A
2 B
2 C
3 D
3 E
3 F
--- 6 row(s) selected.
>>select a,b from test order by a desc, b desc;
A B
----------- ----------
3 F
3 E
3 D
2 C
2 B
1 A
--- 6 row(s) selected.
假如我们希望排序并不按照字母顺序或者数字大小顺序来排序,而是根据自定义的规则排序结果应该怎么实现,可以结合DECODE函数或CASE WHEN实现,关于DECODE的用法请参考: http://trafodion.incubator.apache.org/docs/2.1.0/sql_reference/index.html#decode_function , DECODE与CASE WHEN可以实现相同的功能。
举例如下,结果集有’play’,’collect’及’order’,默认情况下使用ORDER BY的结果应该是’collect’,’order’,’play’,但如果希望按照’play’,’collect’,’order’排序应该像下面这样实现,
>>select t.a,decode(t.a,'play',1,'collect',2,'order',3,4) as rownum
from (
select 'play' as a from dual
union all
select 'collect' as a from dual
union all
select 'order' as a from dual) as t order by rownum;+>+>+>+>+>+>
A ROWNUM
------- ------
play 1
collect 2
order 3