alantong08 发表于 2013-1-29 15:23:31

sql 按指定顺序排序

在ORACLE中使用Decode
      Decode实际用途:Decode可以看做是逐值替换,Decode回为某个字段中的每个值在一系列的if/then测试中查找匹配值并返回指定值。
格式:   
       Decode(value,if1,then1,if2,then2,if3,then3.......,else)
其中value代表表中的一个列(不考虑数据类型)或者一个计算结果(如一个日期减去另一个日子、字符列的substr等)。每一行都对value进行测试,如果value符合条件if1,则decode的结果为then1,以此类推。
事实上,可以构造多对if/then。如果value与任一个if都不符则返回else。
示例:

select * from person order by decode(person_key,4,1,5,2,6,3,7,4)

返回排序结果:
      person_key顺序 4   5    6      7

2、case
      可以用Case函数代替Decode,case函数关键字when then else 和end说明后面的逻辑路径,通常,与使用等价的Decode相比,使用case函数显得比较繁复,但可以使用程序可读性强,而且更容易延续。
示例:
Sql代码收藏代码
select * from person order by case person_key when 4 then 1 when 5 then 2 when 6 then 3 when 7 then 4 end

实现效果和使用decode一样
页: [1]
查看完整版本: sql 按指定顺序排序