首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > oracle >

oracle 的列转行有关问题

2012-05-10 
oracle 的列转行问题。表姓名语文数学外语张一102030杨二203040王三405060........................(n多条)

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; 

热点排行
Bad Request.