本帖最后由 fu504224384 于 2012-03-18 11:35:28 编辑

解决方案 »

  1.   

    select 姓名,
                (case when 语文>=80 then '优'
                      when 语文<80 and 语文 >=60 then '良' 
                      else '60' end) as '语文',
                (case when 数学>=80 then '优'
                      when 数学<80 and 数学 >=60 then '良' 
                      else '60' end)      as '数学', 
                (case when 英语>=80 then '优'
                      when 英语<80 and 英语 >=60 then '良' 
                      else '60' end) as '英语'
    from 成绩表
      

  2.   


    --楼上60那里写错了吧,应该是差吧!
    select 姓名,
                (case when 语文>=80 then '优'
                      when 语文<80 and 语文 >=60 then '良' 
                      else '差' end) as '语文',
                (case when 数学>=80 then '优'
                      when 数学<80 and 数学 >=60 then '良' 
                      else '差' end)      as '数学', 
                (case when 英语>=80 then '优'
                      when 英语<80 and 英语 >=60 then '良' 
                      else '差' end) as '英语'
    from 成绩表
      

  3.   


    --用decode好像更方便一点
    select 姓名,decode(语文,>=80,'优',>=60,'良','差') '语文',
                decode(数学,>=80,'优',>=60,'良','差') '数学',
                decode(英语,>=80,'优',>=60,'良','差') '英语',
      

  4.   

    首先,lz 你要认识到这个问题就是把成绩转化而已;
    其次,case when 可移植性高,decode是oracle的方言,具体用哪个楼主自己思量;
    最后,我闲着蛋疼,给lz写了下:SQL> ed
    已写入 file afiedt.buf  1  create table test(
      2             name varchar2(20),
      3             chinese number,
      4             maths number,
      5*            english number)
      6  /表已创建。SQL> ed
    已写入 file afiedt.buf  1  insert into test
      2* values('张三', 90, 100, 58)
    SQL> /已创建 1 行。SQL> ed
    已写入 file afiedt.buf  1  insert into test
      2* values('李四', 68, 79, 85)
    SQL> /已创建 1 行。SQL> select * from test;NAME                    CHINESE      MATHS    ENGLISH
    -------------------- ---------- ---------- ----------
    张三                         90        100         58
    李四                         68         79         85
    SQL> ed
    已写入 file afiedt.buf  1    select name,
      2                (case when chinese>=80 then '优'
      3                      when chinese<80 and chinese >=60 then '良'
      4                      else '差'
      5                               end)  as chinese,
      6                (case when maths>=80 then '优'
      7                      when maths<80 and maths >=60 then '良'
      8                      else '差' end)  as maths,
      9                (case when english>=80 then '优'
     10                      when english<80 and english >=60 then '良'
     11                      else '差' end) as english
     12*  from test
     13  /NAME                 CH MA EN
    -------------------- -- -- --
    张三                 优 优 差
    李四                 良 良 优
      

  5.   

    60那里没注意到,但decode不能使用非等于符号做判断吧!!
      

  6.   

    看decode函数定义,好像只有等于比较,我这里没有环境,还真没用过>=这种的;
    但是,总觉得decode应该不至于这点功能吧,
    你那里要是有环境,试一下!告诉我行不?
      

  7.   

    decode 里面的判断条件  和  case '描述' when 条件 查补多
    我们平时不可能写:  case  语文 when >80  
      

  8.   


    --创建表
    create table score(stuname varchar2(10),yuwen number(3),sx number(3),yy number(3));
    --添加数据
    insert into score values('张三',90,100,58);
    insert into score values('李四',68,79,85);
    --select查询 用case语句判断
    select stuname,(
    case  when yuwen>=80 then '优'
          when yuwen>=60 then '良'
          when yuwen>=0  then '差' end
    ) as 语文,(
    case when sx>=80 then '优'
         when sx>=60 then '良'
          when sx>=0 then '差' end
    ) as 数学,(
    case when yy>=80 then '优'
         when yy>=60 then '良'
         when yy>=0  then '差' end
    ) as 英语 from score;
      

  9.   


    --创建表
    create table score(stuname varchar2(10),yuwen number(3),sx number(3),yy number(3));
    --添加数据
    insert into score values('张三',90,100,58);
    insert into score values('李四',68,79,85);
    --select查询 用case语句判断
    select stuname,(
    case  when yuwen>=80 then '优'
          when yuwen>=60 then '良'
          when yuwen>=0  then '差' end
    ) as 语文,(
    case when sx>=80 then '优'
         when sx>=60 then '良'
          when sx>=0 then '差' end
    ) as 数学,(
    case when yy>=80 then '优'
         when yy>=60 then '良'
         when yy>=0  then '差' end
    ) as 英语 from score;
      

  10.   


    with t as(
    select '张三' 姓名,90 语文,100 数学,58 英语 from dual
    union all
    select '李四',68,79,85 from dual
    )select 姓名,case when 语文>=80 then '优秀' when 语文>60 then '良' else '差' end "语文",
    case when 数学>=80 then '优秀' when 数学>60 then '良' else '差' end "数学",
    case when 英语>=80 then '优秀' when 英语>60 then '良' else '差' end "英语" from t