Oracle SQL查询结果重排:单行拆分为两行的实现方法
Oracle SQL 宽表拆分行解决方案
针对你提供的表结构,要将每行原生数据拆分为两行,可通过以下两种常用方法实现:
方法一:使用UNION ALL(直观易读)
直接通过两次查询分别提取对应字段,再合并结果:
SELECT ID, Value1 AS "Value1/2", Value3 AS "Value3/4" FROM your_pivoted_table UNION ALL SELECT ID, Value2 AS "Value1/2", Value4 AS "Value3/4" FROM your_pivoted_table ORDER BY ID;
- 第一个查询提取每行的
Value1和Value3,第二个查询提取Value2和Value4 UNION ALL保留所有结果(无重复行时性能优于UNION)ORDER BY ID确保同一ID的两行结果相邻
方法二:使用CROSS JOIN + 行生成器(扩展性更强)
适合后续可能增加更多成对字段的场景:
SELECT t.ID, CASE nums.rn WHEN 1 THEN t.Value1 ELSE t.Value2 END AS "Value1/2", CASE nums.rn WHEN 1 THEN t.Value3 ELSE t.Value4 END AS "Value3/4" FROM your_pivoted_table t CROSS JOIN ( SELECT 1 AS rn FROM DUAL UNION ALL SELECT 2 AS rn FROM DUAL ) nums ORDER BY t.ID, nums.rn;
- 子查询
nums生成两行标记(1和2),通过CROSS JOIN让原表每行对应两行标记数据 - 利用
CASE语句根据标记值选择对应字段,后续新增成对字段时只需扩展CASE逻辑即可
注意:将
your_pivoted_table替换为你实际的表名,若未将Pivot结果保存为表,可直接把原Pivot查询语句替换此处。
内容的提问来源于stack exchange,提问作者Markus
相关产品推荐
相关产品推荐

