Oracle用逗号连接列

时间:2012-10-30 15:34:50

标签: sql database oracle concatenation string-aggregation

  

可能重复:
  How can I combine multiple rows into a comma-delimited list in Oracle?

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

表:

efforts_id        cycle_name      release_name 
123               quarter         march 
123               half            april 
123               full            april
124               quarter         may

我的预期输出:

efforts_id        cycle_name            release_name 
123               quarter,half,full     march,april
124               quarter               may

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

由于

4 个答案:

答案 0 :(得分: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;

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

答案 1 :(得分: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

请参阅SQL Fiddle with Demo

答案 2 :(得分:2)

如果你有Oracle 11g R2,那么LISTAGG是首选的方法:

SELECT efforts_id,
    LISTAGG(cycle_name) WITHIN GROUP(ORDER BY cycle_name),
    LISTAGG(release_name) WITHIN GROUP(ORDER BY cycle_name)
FROM MY_TABLE
GROUP BY efforts_id

如果没有,this article会显示其他方法。

答案 3 :(得分:0)

通过WM_concat函数(当然还有GROUP BY

SELECT efforts_id, wm_concat(cycle_name), wm_concat(release_name)
FROM MY_TABLE
GROUP BY efforts_id
嗯,刚刚发现了这个:

  

请注意, WM_CONCAT 未记录且不受支持,这意味着它不应在生产系统中使用    LISTAGG 功能可以产生与 WM_CONCAT 相同的输出,并由Oracle记录和支持。

相关问题