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 -------------------- -- -- -- 张三 优 优 差 李四 良 良 优
decode 里面的判断条件 和 case '描述' when 条件 查补多 我们平时不可能写: case 语文 when >80
--创建表 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;
--创建表 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;
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
(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 成绩表
--用decode好像更方便一点
select 姓名,decode(语文,>=80,'优',>=60,'良','差') '语文',
decode(数学,>=80,'优',>=60,'良','差') '数学',
decode(英语,>=80,'优',>=60,'良','差') '英语',
其次,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
-------------------- -- -- --
张三 优 优 差
李四 良 良 优
但是,总觉得decode应该不至于这点功能吧,
你那里要是有环境,试一下!告诉我行不?
我们平时不可能写: case 语文 when >80
--创建表
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;
--创建表
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;
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