Create table tmp(types varchar(22) primary key,num int,maps int);
insert into tmp (types, num, maps)values ('计划收储', 635, 50252909);
insert into tmp (types, num, maps)values ('实际供应', 6, 588846.3666);
insert into tmp (types, num, maps)values ('已出库', 2, 137);
insert into tmp (types, num, maps)values ('已入库', 1, 75200);
insert into tmp (types, num, maps)values ('已收储', 2, 84075200);
查询数据如下:select * from tmp;
types num maps
计划收储 635 50252909
实际供应 6 588846
已出库 2 137
已入库 1 75200
已收储 2 84075200
要求显示成如下形式:
计划收储 | 计划收储 | 已出库 | 已入库 | 已收储 | |
地块数 | 635 | 6 | 2 | 1 | 2 |
面积 | 50252909 | 588846 | 137 | 75200 | 84075200 |
执行sql:
(select '地块数' as " ",sum(decode(types,'计划收储',num,0)) as 计划收储,
sum(decode(types,'实际供应',num,0)) as 实际供应,
sum(decode(types,'已出库',num,0)) as 已出库,
sum(decode(types,'已入库',num,0)) as 已入库,
sum(decode(types,'已收储',num,0)) as 已收储 from tmp)
union all
(select '面积' as " ",sum(decode(types,'计划收储',maps,0)) as 计划收储,
sum(decode(types,'实际供应',maps,0)) as 实际供应,
sum(decode(types,'已出库',maps,0)) as 已出库,
sum(decode(types,'已入库',maps,0)) as 已入库,
sum(decode(types,'已收储',maps,0)) as 已收储 from tmp)
下面换成使用关键字pivot实现
select * from (select '地块数' " ", types,num from tmp)
pivot (sum(num) for types in ('计划收储' 计划收储, '实际供应' 实际供应 , '已出库' 已出库 , '已入库' 已入库,'已收储' 已收储))
union all
select * from (select '面积' " ", types,maps from tmp) pivot (sum(maps)
for types in ('计划收储' 计划收储, '实际供应' 实际供应 , '已出库' 已出库 , '已入库' 已入库,'已收储' 已收储))