Oracle实现多行拼接的方法

在Oracle中实现多行拼接的方法有以下几种:

  1. 使用LISTAGG函数:
SELECT id, LISTAGG(name, ', ') WITHIN GROUP (ORDER BY name) AS names
FROM table_name
GROUP BY id;

这将返回以逗号分隔的名称列表,按名称排序,对于每个相同id的记录组合为一个字符串。

  1. 使用XMLAGG和XMLELEMENT函数:
SELECT id, 
   RTRIM(XMLAGG(XMLELEMENT(E, name || ', ')).EXTRACT('//text()'),', ') AS names 
FROM table_name 
GROUP BY id;

这将返回以逗号分隔的名称列表,对于每个相同id的记录组合为一个字符串。XMLAGG函数用于将每个元素组合为一个XML文档,XMLELEMENT函数用于创建元素。

  1. 使用SYS_CONNECT_BY_PATH函数:
SELECT id, SUBSTR(SYS_CONNECT_BY_PATH(name,', '), 3) AS names 
FROM 
   (SELECT id, name, ROW_NUMBER() OVER (PARTITION BY id ORDER BY id) rn, COUNT(*) OVER (PARTITION BY id) cnt  
    FROM table_name) 
WHERE rn = cnt 
START WITH rn = 1 
CONNECT BY PRIOR id = id AND PRIOR rn = rn - 1;

这将返回以逗号分隔的名称列表,对于每个相同id的记录组合为一个字符串。在该查询中,ROW_NUMBER函数在每个id分区内为每个名称生成一个序列号,SYS_CONNECT_BY_PATH函数使用这些序列号将每个名称连接到一个逗号分隔的字符串中。

这些方法可以根据具体情况和性能要求进行选择。

你可能感兴趣的:(数据库,oracle,数据库)