【Oracle】学习笔记之pivot函数使用

废话不多说,先看行转列效果图,列转行就是图片顺序反过来
在这里插入图片描述

在这里插入图片描述

1、行转列

创建一个表

create table A_BANK
(
    NAME  VARCHAR2(100),
    BANK  VARCHAR2(50),
    MONEY NUMBER
)

插入几条数据

insert into A_BANK values ('jack','icbc',8800);
insert into A_BANK values ('jack','boc',9900);
insert into A_BANK values ('lucy','icbc',10);
insert into A_BANK values ('lucy','boc',69000);
insert into A_BANK values ('jack','abc',7700);
insert into A_BANK values ('lucy','abc',4);

结果如 表1 所示

NAMEBANKMONEY
jackicbc8800
jackboc9900
lucyicbc10
lucyboc6900
jackabc7700
lucyabc4
表1

通过pivot函数转换成以下格式

select t.*,
       (t.icbc + t.boc + t.abc) as total
from (select *
      from A_BANK pivot ( max(money) for bank in ('icbc' as icbc , 'boc' as boc, 'abc' as abc) )
     ) t;

结果如 表2 所示

bankicbcbocabctotal
jack88009900770026400
lucy1069000469014
表2

2、列转行

也可以通过unpivot函数回转成表1格式,首先我们根据上面的结果创建另外一张表

create table B_BANK as select t.*,
       (t.icbc + t.boc + t.abc) as total
from (select *
      from A_BANK pivot ( max(money) for bank in ('icbc' as icbc , 'boc' as boc, 'abc' as abc) )
     ) t;

然后对新表进行列转行操作

select name,bank,money from B_BANK unpivot (money for bank in (icbc, boc, abc));

结果如 表3 所示

NAMEBANKMONEY
jackicbc8800
jackboc9900
jackabc7700
lucyicbc10
lucyboc6900
lucyabc4
表3

3、参考博文

Oracle 行列转换函数pivot、unpivot的使用(二)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值