ORacel行列转换问题
如何实现如下SQL语句:
先有一Oracle表:
产品 区域 销售额
A 北京 300
B 上海 400
B 广州 350
C 广州 500
...
现要生成以下查询报表,请问如何用SQL语句实现?
产品 北京 上海 广州 ...
A 300 0 0
B 0 400 350
C 0 0 500
[解决办法]
又是行列转换啊
现在变成一天几次了
如果是固定列就用decdoe
sum(decdoe(区域,'北京',销售额,0)) 北京
如果不是固定列就用存储过程去做
[解决办法]
固定列
- SQL code
select pro 产品,sum(decdoe(area,'北京',amt,0)) 北京 ,sum(decdoe(area,'上海',amt,0)) 上海 ,sum(decdoe(area,'广州',amt,0)) 广州from table agroup by pro
[解决办法]
- SQL code
SQL> SQL> WITH A AS (SELECT 'A' 品,'北京' 域,300 售 FROM DUAL 2 UNION 3 SELECT 'B' 品,'上海' 域,400 售 FROM DUAL 4 UNION 5 SELECT 'B' 品,'州' 域,350 售 FROM DUAL 6 UNION 7 SELECT 'C' 品,'州' 域,500 售 FROM DUAL 8 ) 9 select 品,NVL(MAX(DECODE(域,'北京',售)),0) 北京, 10 NVL(MAX(DECODE(域,'上海',售)),0) 上海, 11 NVL(MAX(DECODE(域,'州',售)),0) 州 12 FROM A 13 GROUP BY 品SQL> / 品 北京 上海 州---- ---------- ---------- ----------A 300 0 0B 0 400 350C 0 0 500
[解决办法]
--测试数据
create table t (XH varchar2(10), DDATE date, SXF int);
insert into t select 1,sysdate,10 from dual union all
select 1,sysdate+1,14 from dual union all
select 1,sysdate+2,23 from dual union all
select 2,sysdate,21 from dual union all
select 2,sysdate+1,24 from dual union all
select 3,sysdate,13 from dual union all
select 3,sysdate+1,22 from dual;
--
create or replace package sp_test
is
type ResultData is ref cursor;
procedure getRstData( rst out ResultData);
end sp_test;
/
create or replace package body sp_test
is
procedure getRstData( rst out ResultData)
is
begin
declare
cursor cur is select distinct (DDATE) from t;
tmp_ddate date;
str varchar2(4000);
begin
str:='select xh';
open cur;
loop fetch cur into tmp_ddate;
exit when cur%notfound;
str:=str||',sum(decode(to_char(ddate,''yyyymmdd''),'||chr(39)||to_char(tmp_ddate,'yyyymmdd')||chr(39)||',sxf,0)) "'||to_char(tmp_ddate,'yyyymmdd')||'"';
end loop;
str:=str||' from t group by xh';
-- dbms_output.put_line(str);
close cur;
open rst for str;
end;
end;
end sp_test;
/
--输出结果
1 10 14 23
2 21 24 0
3 13 22 0
[解决办法]
搜索 行列转换
搜索 潇洒老乌龟
[解决办法]
[解决办法]
如果是固定行数转换的话,用下面这个比较简单:
select 产品,
sum(decode(区域,'广州',销售额,0)) 广州,
sum(decode(区域,'北京',销售额,0)) 北京,
sum(decode(区域,'上海',销售额,0)) 上海
from test_table
group by 产品
[解决办法]
学习中
[解决办法]
有点难实现,关注中。。。。。。。。。。。
[解决办法]
提问前先搜索下!
[解决办法]
[解决办法]
不知,帮顶