日期:2014-05-17 浏览次数:20810 次
select * from( select 姓名,'语文' 科目,语文 分数 from 表 union all select 姓名,'数学' 科目,数学 分数 from 表 union all select 姓名,'外语' 科目,外语 分数 from 表) order by 姓名
------解决方案--------------------
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;