关于decode语句,请教了。

globlefly 2003-04-26 02:56:56
好像decode的条件判断都是单值,如
select id,decode(dept,'a','计算机'
'b','机械'
'c','通讯'
'其他')
但如果有一列是数值,我想根据其范围,来给出值,如下表
ID FIRST_NAME CURRENT_CREDITS
--------- -------------------- ---------------
10000 Scott 29
10001 Margaret 7
10002 Joanne 14
10003 Manish 8
10004 Patrick 1
10005 Timothy 1
10006 Barbara 7
10007 David 4
10008 Ester 8
10009 Rose 7
10010 Rita 8
10011 Shay 9
10012 Timothy 1
10013 Patrick 1
我想根据current_credits的大小,如小于5的,我设为'a',5-10之间的我设为'b',
大于10的我设为'c'。
但我这样写好像不行:
select id,first_name,decode(current_credits,<5,'a',between 5 and 10','b',>10,'c') from students;
请问decode的判断条件,只能为单值。
...全文
82 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
BlueskyWide 2003-04-26
  • 打赏
  • 举报
回复
spirit!
globlefly 2003-04-26
  • 打赏
  • 举报
回复
个人后来只想出这样的办法,
在表仲添加一个等级的字段degree,然后做了一个存储过程。
begin
update students set degree='1'
where current_credits<=5;
commit;
update students set degree='2'
where current_credits between 5 and 10;
commit;
update students set degree='3'
where current_credits between 10 and 15;
commit;
update students set degree='4'
where current_credits between 15 and 20;
commit;
update students set degree='5'
where current_credits》20;
commit;
end;
然后就可以用decode了,如我要统计各个成绩段的数量,就可以这样了:
select decode(current_credits,'1','<5',
'2','5 and 10',
'3','10 and 15',
'4','15 and 20',
'5','>20'),
count(*)
from students
group by current_credits;
大家认为如何,就是感觉如果我的划分登记变化的话,如果要统计5-15之间的话,又要重新写过程和查询语句了。



beckhambobo 2003-04-26
  • 打赏
  • 举报
回复
select id,first_name,decode(sign(current_credits-5)+sign(current_credits-10),-2,'a',-1,'a',0,'b',1,'b',2,'c') from students;
jiezhi 2003-04-26
  • 打赏
  • 举报
回复
decode也是比较有限制的,使用case比较方便。
globlefly 2003-04-26
  • 打赏
  • 举报
回复
用sign好像,只能区分-1,0,1三种情况,如果我decode里面有3种以上的情况,那就不是不能比较了吗?
jiezhi 2003-04-26
  • 打赏
  • 举报
回复
结合decode和sign函数来使用。

17,377

社区成员

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

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