You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle中如何实现列转行的数据转换?

Oracle 列转行数据转换方案

示例数据

IDA_IDB_IDC_IDD_ID
1'ABC''XYZ''PLO''QWE'

预期输出

IDA_ID
1'ABC'
1'XYZ'
1'PLO'
1'QWE'

实现方法

方法1:使用UNION ALL

适合列数量较少的场景,通过拆分每列查询后合并结果:

SELECT ID, A_ID AS A_ID FROM your_table
UNION ALL
SELECT ID, B_ID FROM your_table
UNION ALL
SELECT ID, C_ID FROM your_table
UNION ALL
SELECT ID, D_ID FROM your_table;

注:UNION ALL会保留所有行,若需去重可替换为UNION,但列转行场景通常不需要去重。

方法2:使用Oracle UNPIVOT语法

Oracle 11g及以上版本支持该语法,写法更简洁,适配多列场景:

SELECT ID, A_ID
FROM your_table
UNPIVOT (
    A_ID FOR temp_col IN (A_ID, B_ID, C_ID, D_ID)
);
  • A_ID:指定转换后值列的名称(对应预期输出的A_ID列)
  • temp_col:临时列名,用于存储原表的列名(无需保留时可省略,直接写A_ID IN (A_ID, B_ID, C_ID, D_ID))

如果需要保留原列名信息,可调整为:

SELECT ID, original_col, A_ID
FROM your_table
UNPIVOT (
    A_ID FOR original_col IN (
        A_ID AS 'A_ID',
        B_ID AS 'B_ID',
        C_ID AS 'C_ID',
        D_ID AS 'D_ID'
    )
);

此时结果会新增original_col列,显示每个值对应的原表列名。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 06:15:21