Oracle用逗号连接列

Jap*_*ans 5 sql database oracle concatenation string-aggregation

可能重复:
如何将多行组合到Oracle中以逗号分隔的列表中?

有人可以告诉我如何实现以下目标吗?

表:

efforts_id        cycle_name      release_name 
123               quarter         march 
123               half            april 
123               full            april
124               quarter         may
Run Code Online (Sandbox Code Playgroud)

我的预期产量:

efforts_id        cycle_name            release_name 
123               quarter,half,full     march,april
124               quarter               may
Run Code Online (Sandbox Code Playgroud)

我是oracle的初学者所以不确定如何做到这一点.任何帮助,将不胜感激.

谢谢

Col*_*art 7

你需要的是"字符串聚合".Tim Hall的优秀网站根据您所拥有的Oracle的确切版本显示了您的替代方案:http://www.oracle-base.com/articles/misc/string-aggregation-techniques.php

在11gR2(写入时的当前版本)中,您应该使用listagg函数:

select
  efforts_id,
  listagg(cycle_name, ',') within group (order by cycle_name) as cycle_name,
  listagg(release_name, ',') within group (order by release_name) as release_name
from my_table
group by efforts_id;
Run Code Online (Sandbox Code Playgroud)

请注意,Oracle不支持使用wm_concat函数...


Tar*_*ryn 6

您将需要用于LISTAGG()执行此任务.其他答案不会删除任何重复值,要删除重复项,您可以使用类似于此的内容:

select c.efforts_id, 
  c.cycle_name,
  listagg(r.release_name, ', ') within group (order by c.efforts_id) as release_name
from
(
  select efforts_id,
    listagg(cycle_name, ', ') within group (order by efforts_id) as cycle_name
  from yourtable
  group by efforts_id
) c
inner join
(
  select distinct efforts_id, release_name
  from yourtable
) r
  on c.efforts_id = r.efforts_id
group by c.efforts_id, c.cycle_name
Run Code Online (Sandbox Code Playgroud)

请参阅SQL Fiddle with Demo