如何在order by 里使用decode()函数

sunwei5766 2006-01-26 09:53:49
我需要在程序里对库里的一个表进行操作,但排序的条件有四个,我想就写一个sql语句,是下面这样
前面省略
.
.
.
order by decode('radio1_1', 'radio1_1', 'RELY_NO desc',
'radio1_2', 'TORIHIKI_NAME', 'radio1_3', 'TANTONAME_E', 'TANTONAME_J')
order by 后面的decode()函数我就是按上面那样写的。虽然没报错,但根本没去作用,于是我改成
order by decode('radio1_1', 'radio1_1', RELY_NO desc,
'radio1_2', TORIHIKI_NAME, 'radio1_3', TANTONAME_E, TANTONAME_J),但改完后在执行就报错了,我不知道问题出在哪里,谁能教教我,谢谢。
...全文
1030 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
boydgmx 2006-01-28
  • 打赏
  • 举报
回复
decode返回的是函数值,不能把order by 子句中的DESC 也包括进去,你这种写法是想组合SQL语句,但肯定不行。

一般这种需求都这么做:
order by decode(col,'asdfsd',1,'asdfede',2,col)

也就是按照你期望的顺序,转换成数字来排序
wfeng7907 2006-01-27
  • 打赏
  • 举报
回复
order by decode('radio1_1', 'radio1_1', RELY_NO desc,
'radio1_2', TORIHIKI_NAME, 'radio1_3', TANTONAME_E, TANTONAME_J),
这样用是不合适的,违反了decode的使用方法,如果要根据楼主根据不同的radio1_1值排序,可以参照楼上的写函数的方法.
cenlmmx 2006-01-26
  • 打赏
  • 举报
回复
没怎么看懂,是不是这个
order by decode('radio1_1', 'radio1_1', 'RELY_NO desc',
'radio1_2', 'TORIHIKI_NAME', 'radio1_3', 'TANTONAME_E, TANTONAME_J')

给你个例子看有没有帮助
SQL> create table t as select rownum id from user_objects where rownum < 4;

Table created.

SQL> create function f(id int) return number as
2 begin
3 if id = 2 then
4 return 3;
5 elsif id = 3 then
6 return 2;
7 else
8 return id;
9 end if;
10 end;
11 /

Function created.

SQL> select * from t order by f(id);

ID
----------
1
3
2

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧