You need to enable JavaScript to run this app. Oracle中将UNION ALL列转行查询替换为UNPIVOT的实现方法
优惠活动
大模型
产品
解决方案
定价
更多

Oracle中将UNION ALL列转行查询替换为UNPIVOT的实现方法

结论

完全可以使用Oracle的UNPIVOT语句替换原有UNION ALL实现的列转行逻辑,最终输出结果和原有逻辑100%一致。

实现代码
SELECT 
  COL1,
  COL2,
  SEQ,
  'GRP 10' AS GRP_NAME,
  INPUT_COL_NAME,
  OUTPUT_COL_NAME
FROM TABLE1
-- 加INCLUDE NULLS完全对齐UNION ALL逻辑,NULL值也会保留对应行,不需要可移除
UNPIVOT INCLUDE NULLS (
  COL2 FOR (INPUT_COL_NAME, SEQ, OUTPUT_COL_NAME) IN (
    ABC AS ('ABC', '1', 'NEW1'),
    MNO AS ('MNO', '2', 'NEW2'),
    XYZ AS ('XYZ', '3', 'NEW3')
  )
)
结果验证

结合你给出的测试数据,上述UNPIVOT查询和原有UNION ALL查询输出完全一致,结果如下:

COL1COL2SEQGRP_NAMEINPUT_COL_NAMEOUTPUT_COL_NAME
101GRP 10ABCNEW1
1202GRP 10MNONEW2
11003GRP 10XYZNEW3
2151GRP 10ABCNEW1
2502GRP 10MNONEW2
21503GRP 10XYZNEW3
方案优势
  • 性能更优:原有UNION ALL写法需要扫描TABLE1三次,UNPIVOT写法仅需扫描一次,数据量越大性能提升越明显
  • 维护更简单:后续需要新增转换列时,只需在UNPIVOT的IN子句中新增对应映射规则即可,无需重复写SELECT逻辑

内容的提问来源于stack exchange,提问作者OracleForLife

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.20 23:54:06