Skip to main content
 首页 » 编程设计

sql之oracle中有没有类似mysql中group_concat的函数

2024年05月22日7langtianya

我的输入是这样的。

col1   col2 
1      a 
1      b 
2      c 
2      d 
2      e 

O/p:应该是这样的

col1    col2 
1       a,b 
2       c,d,e 

我想要一个可以在数据库级别触发的查询。我尝试了各种方法,但无法解决这个问题...

请您参考如下方法:

11g 及更高版本: 使用 listagg :

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

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; 
/ 

使用该功能:

select col1, get_comma_separated_value(col1) from table_name 

注意:某些旧版本的 Oracle 上有一个(不受支持的)函数 WM_CONCAT,这可能会帮助您 - 请参阅 here for details .

在 MySQL 中:

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