为了账号安全,请及时绑定邮箱和手机立即绑定

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

/ 猿问

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

HappyDay1234567890 2019-07-27 14:15:05

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

我的投入是这样的。


col1   col2

1      a

1      b

2      c

2      d

2      e

O / p:应该是这样的


col1    col2

1       a,b

2       c,d,e

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


查看完整描述

2 回答

?
qq_遁去的一_1

11g及更高:使用listagg

SELECT 
    col1,
    LISTAGG(col2, ', ') WITHIN GROUP (ORDER BY col2) "names"FROM table_xGROUP BY col1

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

CREATE OR REPLACE FUNCTION get_comma_separated_value (input_val  in  number)
  RETURN VARCHAR2IS
  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;/

要使用该功能:

select col1, get_comma_separated_value(col1) from table_name

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

在MySQL中:

SELECT col1, GROUP_CONCAT(col2) FROM table_name GROUP BY col1


查看完整回答
反对 回复 2019-07-27
?
沧海一幻觉

如果结果超出VARCHAR2限制,LISTAGG将抛出“ORA-01489:字符串连接的结果太长”。有关自定义聚合函数,请参阅stackoverflow.com/a/29008456/848072

查看完整回答
反对 回复 2019-07-27

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信