【问题标题】:Merging Query Result into single row - Oracle将查询结果合并到单行 - Oracle
【发布时间】:2012-05-09 09:16:49
【问题描述】:

我可以在 oracle 中这样做吗?我有一些这样的数据:

No | Data |
===========
 1 | A    |
 1 | B    |
 1 | C    |
 1 | D    |

是否有任何查询可以产生这样的结果,.?

No | Data       |
=================
 1 | A, B, C, D |

非常感谢:D

【问题讨论】:

标签: oracle plsql string-aggregation


【解决方案1】:

也许this page 显示了您正在寻找的内容。

【讨论】:

    【解决方案2】:

    SQL Fiddle

    Oracle 11g R2 架构设置

    CREATE TABLE TEST ( ID, DATA ) AS
              SELECT 1, 'A' FROM DUAL
    UNION ALL SELECT 1, 'B' FROM DUAL
    UNION ALL SELECT 1, 'C' FROM DUAL
    UNION ALL SELECT 1, 'D' FROM DUAL
    UNION ALL SELECT 2, 'E' FROM DUAL
    UNION ALL SELECT 2, 'F' FROM DUAL;
    

    查询 1

    SELECT ID,
           LISTAGG( DATA, ',' ) WITHIN GROUP ( ORDER BY DATA ) AS AGGREGATED_DATA
    FROM   TEST
    GROUP BY ID
    

    Results

    | ID | AGGREGATED_DATA |
    |----|-----------------|
    |  1 |         A,B,C,D |
    |  2 |             E,F |
    

    【讨论】:

      【解决方案3】:

      在 Oracle 中,我们可以使用 wm_concat 函数。这是上面的查询示例:

      SELECT no, wm_concat(data) from table group by no
      

      参考:wm_concat

      【讨论】:

      • 请注意 wm_concat 未记录,因此使用风险自负。
      • 非常好:with my_table as ( select 1 num, 'A' col from dual union select 1 num, 'B' col from dual union select 1 num, 'C' col from dual union select 1 num, 'D' col 从双联合选择 2 num, 'E' col 从双联合选择 2 num, 'F' col 从双联合选择 2 num, 'G' col 从双联合选择 2 num, 'H' col from dual ) select num, wm_concat(col) from my_table group by num ;
      【解决方案4】:
      select 
         no,
         rtrim (xmlagg (xmlelement (d, data|| ',')).extract ('//text()'), ',') data
      from 
         table_name
      group by 
         no
      ;
      

      【讨论】:

        最近更新 更多