当前位置: 代码迷 >> Oracle管理 >> oracle 的列转行有关问题
  详细解决方案

oracle 的列转行有关问题

热度:11   发布时间:2016-04-24 05:21:36.0
oracle 的列转行问题。


姓名 语文 数学 外语
张一 10 20 30

杨二 20 30 40

王三 40 50 60

........................(n多条)

变成


姓名 科目 分数
张一 语文 10
张一 数学 20
张一 外语 30

......


oracle有什么好的方法来转变一下吗,将列转成行。

------解决方案--------------------
SQL code
select * from(select 姓名,'语文' 科目,语文 分数 from 表union allselect 姓名,'数学' 科目,数学 分数 from 表union allselect 姓名,'外语' 科目,外语 分数 from 表)order by 姓名
------解决方案--------------------
SQL code
create table tb(姓名 varchar(10) , 课程 varchar(10) , 分数 int);--insert into tb values('张三' , '语文' , 74);insert into tb values('张三' , '数学' , 83);insert into tb values('张三' , '物理' , 93);insert into tb values('李四' , '语文' , 74);insert into tb values('李四' , '数学' , 84);insert into tb values('李四' , '物理' , 94);--动态SQL,指课程不止语文、数学、物理这三门课程。(以下同)declare     v_sql varchar2(4000);begin    v_sql:= 'select 姓名 ,';        select v_sql || wmsys.wm_concat(' max(case 课程 when ''' || 课程 || ''' then 分数 else 0 end) ' || 课程 || '') into v_sql    from (select distinct 课程 from tb) a;    v_sql := v_sql || ' from tb group by 姓名';        dbms_output.put_line(v_sql);        --execute immediate v_sql;--把dbms_output.put_line(v_sql) 语句运行出来的脚本 跑一边就可以了end;
  相关解决方案