【问题标题】:Transpose one row into many rows Oracle将一行转为多行 Oracle
【发布时间】:2026-01-30 10:20:07
【问题描述】:

我有一个查询总是返回一行,包含 许多 列。我想把它变成 2 列和多行。

原始结果:

Col1, Col2, Col3, Col4
----------------------
val1, val2, val3, val4

我想要什么:

ColName, Value
--------------
Col1,    val1
Col2,    val2
Col3,    val3
Col4,    val4

这可能吗?

编辑(澄清)

我正在寻找一种自动执行此操作的方法。 IE,我可以从任何只返回 1 行的查询中传递结果。

【问题讨论】:

    标签: sql oracle transpose


    【解决方案1】:

    当然。做

    select 'Col1' ColName, Col1 Value from srctable union all
    select 'Col2', Col2 from srctable union all
    select 'Col3', Col3 from srctable union all
    select 'Col4', Col4 from srctable
    

    【讨论】:

    • 嗯。这样就行了。不过,我有点希望有一种自动的方法......
    【解决方案2】:

    您使用的是 Oracle 11g 吗?您是否尝试过旋转和取消旋转?

    更多信息here

    【讨论】:

    • 我确实有 unpivot。这仍然不能完全满足我的要求,但我会将其拆分为第二个问题。
    • 后人注意:这仅适用于所有列的返回类型相同的情况。您可以通过 to_char() 将它们全部投射来解决这个问题
    【解决方案3】:

    我猜你没有内置数据透视表支持的 Oracle 版本。不幸的是,它从来都不是很干净的代码,因为您必须构建每一行。

    查看这个较早的帖子以获取示例

    transpose-select-results-with-oracle

    【讨论】:

      最近更新 更多