首页 > 数据库 > mysql教程 > 旧版 Oracle 中是否有与 MySQL 的 GROUP_CONCAT 等效的 LISTAGG?

旧版 Oracle 中是否有与 MySQL 的 GROUP_CONCAT 等效的 LISTAGG?

Patricia Arquette
发布: 2025-01-15 12:19:45
原创
128 人浏览过

Is There a LISTAGG Equivalent in Older Oracle Versions to MySQL's GROUP_CONCAT?

Oracle 中是否存在 MySQL 的 GROUP_CONCAT 等效项?

问题:

如何在 Oracle 中将指定列中的多个值连接成单个逗号分隔的字符串?输入数据遵循特定格式,所需输出应为每个唯一键分组并连接值。

解答:

对于 Oracle 11g 及更高版本:

使用 LISTAGG 函数:

<code class="language-sql">SELECT 
    col1,
    LISTAGG(col2, ', ') WITHIN GROUP (ORDER BY col2) "names"
FROM table_x
GROUP BY col1</code>
登录后复制

对于 Oracle 10g 及更低版本:

一种方法是创建一个自定义函数:

<code class="language-sql">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;
/</code>
登录后复制

使用方法:

<code class="language-sql">SELECT col1, get_comma_separated_value(col1) FROM table_name</code>
登录后复制

注意: Oracle 11g 之前的版本对 WM_CONCAT 函数的支持有限,但由于潜在问题,不建议使用该函数(有关详细信息,请参阅 Oracle 文档)。

在 MySQL 中(仅供参考):

GROUP_CONCAT 函数可用:

<code class="language-sql">SELECT col1, GROUP_CONCAT(col2) FROM table_name GROUP BY col1</code>
登录后复制

以上是旧版 Oracle 中是否有与 MySQL 的 GROUP_CONCAT 等效的 LISTAGG?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板