16:43:44 SQL> select id,name,decode(sign(grade-90),1,'优秀',
16:44:21   2  decode(sign(grade-80),1,'良好',
16:44:27   3  decode(sign(grade-60),1,'及格','不及格')
16:44:32   4  )) grade from student;ID         NAME       GRADE
---------- ---------- ------
1          csdn1      不及格
2          csdn2      及格
3          csdn3      及格
4          csdn4      良好
5          csdn5      优秀已用时间:  00: 00: 00.47
16:44:34 SQL>

解决方案 »

  1.   

    有bug.16:47:56 SQL> select id,name,decode(sign(grade-60),-1,'不及格',
    16:47:58   2  decode(sign(grade-80),-1,'及格',
    16:48:07   3  decode(sign(grade-90),-1,'良好','优秀')
    16:48:17   4  )) grade from student;ID         NAME       GRADE
    ---------- ---------- ------
    1          csdn1      及格
    2          csdn2      及格
    3          csdn3      良好
    4          csdn4      优秀
    5          csdn5      优秀已用时间:  00: 00: 00.31
    16:48:18 SQL>
      

  2.   

    select case when cast(grade as number)>=60 and cast(grade as number)<80
           then 
             '及格'
           else
             case when cast(grade as number)>=80 and cast(grade as number)<90 
             then
               '良好'
             else
               case when cast(grade as number)>=90 
               then
                 '优秀'
               end
             end
           end             
    from student
      

  3.   

    谢谢了
    要的就是sign这个函数
    揭帖啰
      

  4.   

    终于弄清楚了:
    case grade
    when 80 then 'normal'
    when 90 then 'excellence'
    end
    与decode有同样的功能
    但是
    case 
    when grade>=80 and grade<90 then 'normal'
    when grade>=90 then 'excellence'
    end
    语句才是我想要的,两种写法,意义大相径庭