SQL> create table temp1
2 (c1 varchar2(20),
3 c2 number(3));
Table created.
SQL> insert into temp1
2 (c1,c2)
3 select '语文',70 from dual
4 union
5 select '数学',80 from dual
6 union
7 select '英语',58 from dual;
3 rows created.
SQL> select * from temp1;
C1 C2
-------------------- ----------
数学 80
英语 58
语文 70
SQL> select max(decode(c1,'语文',c2)) 语文,
2 max(decode(c1,'数学',c2)) 数学,
3 max(decode(c1,'英语',c2)) 英语
4 from temp1;
语文 数学 英语
---------- ---------- ----------
70 80 58
SQL> select case when max(decode(c1,'语文',c2))<60 then '不及格'
2 when max(decode(c1,'语文',c2))>=80 then '优秀'
3 else '及格' end 语文,
4 case when max(decode(c1,'数学',c2))<60 then '不及格'
5 when max(decode(c1,'数学',c2))>=80 then '优秀'
6 else '及格' end 数学,
7 case when max(decode(c1,'英语',c2))<60 then '不及格'
8 when max(decode(c1,'英语',c2))>=80 then '优秀'
9 else '及格' end 英语
10 from temp1;
语文 数学 英语
------ ------ ------
及格 优秀 不及格
11g以上版本可以用pivot函数实现,实现方法类似:
SQL> select * from temp1
2 pivot (
3 max(c2) for c1 in ('语文','数学','英语')
4 );
'语文' '数学' '英语'
---------- ---------- ----------
70 80 58