Oracle12C | 行转列

原效果

stuCodestuNamestuSubpoint
01ZS数学90
01ZS物理91
01ZS化学91

实现效果

stuCodestuNamemathphysicalChemistry
01ZS909191

1. 使用 pivot for 聚合函数

-- Oracle pivot([聚合函数]) for [需行转列的字段名] in('[需行转列的字段值类型1]' AS [目标列名1], '[需行转列的字段值类型2]' AS [目标列名2]) 动态行转列
-- eg
SELECT * FROM (SELECT stuCode, stuName, stuSub, point FROM STU_CLASS_GRA)
pivot(sum(point)) for stuSub in ('数学' AS math, '物理' AS physical, '化学' AS Chemistry)

-- 勘误,当时手写的例子,不够仔细...
pivot(sum(point) for stuSub in ('数学' AS math, '物理' AS physical, '化学' AS Chemistry))

2. 使用 listagg within 聚合函数

SELECT listagg(neqnum, ',') within group(order by neqnum) tables FROM PLO_CONCIST

结束~~

写在后面
实现行专列的方式有很多种,除了以上两种方式,还可以根据 join 方式进行手动拼接,还可以创建自定义函数等…值得一提的是 wmconcat 方法也可以实现行专列,不过在 Oracle12 版本之后已经不支持了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值