Oracle sql 学习笔记3 行转列的多种方式及pivot的应用

这篇博客总结了Oracle SQL中实现行转列的四种方法,包括DECODE、CASE WHEN、PIVOT以及不使用PIVOT的方式。详细解释了每种方法的适用场景,如DECODE和CASE WHEN需配合GROUP BY使用,PIVOT则用于动态列转换。此外,还提到了与特定表连接来格式化输出结果的实践。
摘要由CSDN通过智能技术生成

在日常工作中,经常遇到需要将行转列的情况。通过近段时间的学习,分别将几种实现方式总结如下:

一、DECODE 方式

SELECT 
 CASE WHEN GROUPING(A.SSSWJG_ID)=1 THEN '151170000' ELSE A.SSSWJG_ID END SWJG_DM,
 SUM(DECODE(A.SZ_ID,'10101',A.SJJE)) ZZS,
 SUM(DECODE(A.SZ_ID,'10102',A.SJJE)) XFS,
 SUM(DECODE(A.SZ_ID,'10104',A.SJJE)) QYSDS,
 SUM(DECODE(A.SZ_ID,'10106',A.SJJE)) QYSDS,
 SUM(DECODE(A.SZ_ID,'10107',A.SJJE)) ZYS
 FROM
 (
 select T.SSSWJG_ID,T.SZ_ID, sum(T.RKSE) SJJE
  from tab1_jks t JOIN tab3_sz R ON t.sz_id=r.sz_id
 where TO_CHAR(T.RKJZRQ, 'YYYYMM') = '202002'
       AND R.SJSZ_ID='10100'
 group by T.SSSWJG_ID,T.SZ_ID
 )A
 GROUP BY ROLLUP(A.SSSWJG_ID);

使用时,需要结合group by进行分组汇总,否则会有数据溢出效应。

二、CASE WHEN 方式

SELECT 
 CASE WHEN GROUPING(A.SSSWJG_ID)=1 THEN '151170000' ELSE A.SSSWJG_ID END JG_DM,
 SUM(CASE WHEN A.SZ_ID='10101' THEN A.RKSE ELSE 0 END) ZZS,
 SUM(CASE WHEN A.SZ_ID='10102' THEN A.RKSE ELSE 0 END) XFS,
 SUM(CASE WHEN A.SZ_ID='10104' THEN A.RKSE ELSE 0 END) QYSDS,
 SUM
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值