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

这篇博客总结了Oracle SQL中实现行转列的四种方法,包括DECODE、CASE WHEN、PIVOT以及不使用PIVOT的方式。详细解释了每种方法的适用场景,如DECODE和CASE WHEN需配合GROUP BY使用,PIVOT则用于动态列转换。此外,还提到了与特定表连接来格式化输出结果的实践。
最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



