日期:2014-05-17  浏览次数:20757 次

高手帮忙解决oracle一个行列转换的问题!
通过统计得到下面一张表(表的行数不定)
code   number
01         50
02         38
03         23
……
希望把行列进行转换
得到结果为
列名:01   02   03……
数据:50   38   23……
即得到一行数据即可。
因为是在统计报表的sql语句中使用,所以必须用sql语句实现(郁闷!)
那位高手帮帮忙!谢谢!
帮顶给分

------解决方案--------------------
我也想实现这样一个功能,正在研究中。
顶顶顶顶顶
------解决方案--------------------
--测试数据
create table table2(ccode varchar2(10), cnumber varchar2(10));
insert into table2
select '01 ', '50 ' from dual union all
select '02 ', '38 ' from dual union all
select '03 ', '23 ' from dual union all
select '04 ', '24 ' from dual;

--存储过程
create or replace procedure getRstData( rst out sys_refcursor)
is
begin
declare
cursor cur is select ccode from table2;
str varchar2(4000);
fcode varchar2(10);
begin
open cur;
loop
fetch cur into fcode;
exit when cur%notfound;
str:=str|| ',sum(decode(ccode, '||chr(39)||fcode||chr(39)|| ',cnumber,0)) " '||fcode|| ' " ';
end loop;
str:= 'select '||substr(str,2,length(str)-1)|| ' from table2 ';
dbms_output.put_line(str);
close cur;
open rst for str;
end;
end;

--输出结果
01 02 03 04
--------------
50 38 23 24