oracle 行转列(转载)

来源:互联网 发布:多角色数据库设计 编辑:程序博客网 时间:2024/06/08 06:44
  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
原创粉丝点击