【问题标题】:How to transform rows to a single row with columns in Oracle如何在Oracle中将行转换为带有列的单行
【发布时间】:2026-02-06 18:25:01
【问题描述】:

你好。 我正在开发一个将行转换为单行的 SQL。

例如,

select key, value from AAA;

可能会带来结果:

==================
Key     |    Value
==================
A1      | P1
A2      | P3
...     | ...
An      | Pn

不过,我想让它像下面这样

=======================================================
C1  |  C2  |  C3  |  C4  | ... | ... |  Cn*2-1  | Cn*2
=======================================================
A1  |  P1  |  A2  |  P2  | ... | ... |  An      | Pn

*C1, C2 ... 是列名。

你有什么好主意吗?

【问题讨论】:

  • 我认为你不能用直接的 SQL 做到这一点。也许结合 PL/SQL 和 SQL。
  • 无限?百万?数以亿计?祝你好运;-)
  • Mark J. Bobak 链接的解决方案可以工作。但是我不能在我的程序中使用 PL/SQL。

标签: sql oracle


【解决方案1】:

不确定您的 C1...Cn... 来自哪里。这个例子涵盖了另一部分:A1 P1...:

 SELECT LISTAGG(single_row, ' | ') WITHIN GROUP (ORDER BY single_row) AS final_val
  FROM
  (
   SELECT Keys||' '||Val single_row
     FROM
  (
   SELECT 'A1'  Keys, 'P1' Val FROM dual
    UNION ALL
   SELECT 'A2', 'P3' FROM dual
    UNION ALL
   SELECT 'A3', 'P4' FROM dual
  )
 )
/

Output:
A1 P1 | A2 P3 | A3 P4

【讨论】:

  • 对不起。我没有提到 C1...Cn.... 它们是 Coulmn 的名字。因此,单行完全由列分隔。
最近更新 更多