17,140
社区成员




select 日期,
sum(decode(类型,1,数量,0)) "类型1" ,
sum(decode(类型,2,数量,0)) "类型2" ,
sum(decode(类型,3,数量,0)) "类型3"
from tb1
group by 日期
order by 日期
create table t1("日期" date,"类型" number,"数量" number);
select * from t1 pivot(sum(数量) for 类型 in(1 类型1, 2 类型2, 3 类型3));
SCOTT@xp-ora10g> create table t1("日期" date,"类型" number,"数量" number);
Table created.
SCOTT@xp-ora10g> insert into t1 values(to_date('2013-06-04'),1,20);
1 row created.
SCOTT@xp-ora10g> insert into t1 values(to_date('2013-06-04'),2,10);
1 row created.
SCOTT@xp-ora10g> insert into t1 values(to_date('2013-06-03'),1,60);
1 row created.
SCOTT@xp-ora10g> insert into t1 values(to_date('2013-06-03'),1,20);
1 row created.
SCOTT@xp-ora10g> insert into t1 values(to_date('2013-06-03'),2,10);
1 row created.
SCOTT@xp-ora10g> insert into t1 values(to_date('2013-06-03'),3,10);
1 row created.
SCOTT@xp-ora10g> select * from t1;
日期 类型 数量
---------- ---------- ----------
2013-06-04 1 20
2013-06-04 2 10
2013-06-03 1 60
2013-06-03 1 20
2013-06-03 2 10
2013-06-03 3 10
6 rows selected.
SCOTT@xp-ora10g> select 日期,sum(case when 类型=1 then 数量 else 0 end) "类型1",sum(case when 类型=2 then 数量 else 0end
) "类型2",sum(case when 类型=3 then 数量 else 0 end) "类型3" from t1 group by 日期;
日期 类型1 类型2 类型3
---------- ---------- ---------- ----------
2013-06-04 20 10 0
2013-06-03 80 10 10
就样就可以了,行转列运用的还是比较广的