Oracle数据库行显示转换成列显示--pivot的应用

本文介绍了一种使用SQL进行数据聚合的方法,通过示例展示了如何利用decode函数和pivot关键字来实现不同类型的汇总,适用于需要对多类型数据进行高效整理的场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

要求显示成如下形式:                                                         

 计划收储计划收储已出库已入库已收储
地块数6356212
面积502529095888461377520084075200

执行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 ('计划收储' 计划收储, '实际供应'  实际供应 , '已出库' 已出库 , '已入库' 已入库,'已收储' 已收储))


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值