日期:2014-05-17 浏览次数:20923 次
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 成绩表
------解决方案--------------------
--楼上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 成绩表
------解决方案--------------------
首先,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 -------------------- -- -- -- 张三 优 优 差 李四 良 良 优