oracle中有没有类似于mysql中的group_concat的函数?

Pra*_*nth 48 sql oracle

我的投入是这样的.

col1   col2
1      a
1      b
2      c
2      d
2      e
Run Code Online (Sandbox Code Playgroud)

O/p:应该是这样的

col1    col2
1       a,b
2       c,d,e
Run Code Online (Sandbox Code Playgroud)

我想要一个可以在DB级别触发的查询.我尝试了各种各样的方法,但未能做到这一点......

hsu*_*suk 88

11g及更高:使用listagg:

SELECT 
    col1,
    LISTAGG(col2, ', ') WITHIN GROUP (ORDER BY col2) "names"
FROM table_x
GROUP BY col1
Run Code Online (Sandbox Code Playgroud)

10g及更低:一种方法是使用一个功能:

CREATE OR REPLACE FUNCTION get_comma_separated_value (input_val  in  number)
  RETURN VARCHAR2
IS
  return_text  VARCHAR2(10000) := NULL;
BEGIN
  FOR x IN (SELECT col2 FROM table_name WHERE col1 = input_val) LOOP
    return_text := return_text || ',' || x.col2 ;
  END LOOP;
  RETURN LTRIM(return_text, ',');
END;
/
Run Code Online (Sandbox Code Playgroud)

要使用该功能:

select col1, get_comma_separated_value(col1) from table_name
Run Code Online (Sandbox Code Playgroud)

注意:WM_CONCAT某些旧版本的Oracle可以使用(不支持的)功能,这可能对您有所帮助 - 请参阅此处了解详细信息.

在MySQL中:

SELECT col1, GROUP_CONCAT(col2) FROM table_name GROUP BY col1
Run Code Online (Sandbox Code Playgroud)

  • 如果结果超出VARCHAR2限制,LISTAGG将抛出"ORA-01489:字符串连接的结果太长".有关自定义聚合函数,请参见http://stackoverflow.com/a/29008456/848072 (3认同)

归档时间:

查看次数:

72267 次

最近记录:

7 年,5 月 前