日期:2014-05-17 浏览次数:20789 次
--测试数据 create table test1(id int,cdate varchar2(2),shop varchar2(100), y_com varchar2(100), total int); insert into test1 select 1,'01','北京','运输公司1',4 from dual union all select 2,'01','北京','运输公司2',5 from dual union all select 3,'01','北京','运输公司3',6 from dual union all select 4,'01','北京','运输公司1',7 from dual union all select 5,'01','北京','运输公司1',8 from dual union all select 6,'01','北京','运输公司1',9 from dual union all select 7,'01','北京','运输公司1',10 from dual; --行列转换 create or replace procedure getRstData( rst out sys_refcursor) is begin declare cursor cur is select y_com,sum(total) s from test1 group by cdate,shop,y_com; t1 varchar2(100); t2 varchar2(100); str varchar2(4000); begin str:='select cdate,shop'; open cur; loop fetch cur into t1,t2; exit when cur%notfound; str:=str||','''||t1||''',''(台数'||t2||')'''; end loop; str:=str||' from test1 group by cdate,shop'; --dbms_output.put_line(str); close cur; open rst for str; end; end; --输出结果 1 01 北京 运输公司1 (台数38) 运输公司2 (台数5) 运输公司3 (台数6)
------解决方案--------------------
SELECT DATE1,SHOP,'运输公司1 (台数'||SUM(CASE WHEN Y_COM='运输公司1'
THEN TOTAL ELSE 0 END)||')' 运输公司1,
'运输公司2 (台数'||SUM(CASE WHEN Y_COM='运输公司2'
THEN TOTAL ELSE 0 END)||')' 运输公司2,
'运输公司3 (台数'||SUM(CASE WHEN Y_COM='运输公司3'
THEN TOTAL ELSE 0 END)||')' 运输公司3
FROM A GROUP BY DATE1,SHOP
--
DATE1 SHOP 运输公司1 运输公司2 运输公司3
1 01 北京 运输公司1 (台数38) 运输公司2 (台数5) 运输公司3 (台数6)