日期:2014-05-17 浏览次数:20936 次
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;