You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle如何按user、group分组将多行数据合并为逗号分隔单行?

Oracle按指定字段分组拼接字符串查询实现

适用11g R2及以上版本(官方推荐方案)

可以直接使用Oracle官方提供的聚合函数LISTAGG实现需求,示例代码如下:

SELECT
  "USER",
  "GROUP",
  LISTAGG(SUB, ',') WITHIN GROUP (ORDER BY SUB) AS SUB
FROM 你的表名
GROUP BY "USER", "GROUP";

语法说明:

  • LISTAGG的第一个参数为需要拼接的字段,第二个参数为拼接使用的分隔符
  • WITHIN GROUP (ORDER BY SUB)用来指定拼接时的字段排序规则,如果不需要按SUB大小排序,可替换为其他排序字段,也可以写ORDER BY NULL不指定排序规则

适用10g及更低版本(临时测试可用)

低版本Oracle可使用未公开的内置函数WM_CONCAT实现,示例代码如下:

SELECT
  "USER",
  "GROUP",
  WM_CONCAT(SUB) AS SUB
FROM 你的表名
GROUP BY "USER", "GROUP";

注意:WM_CONCAT是Oracle未对外公开的函数,没有官方兼容性保障,高版本Oracle已移除该函数,禁止在生产环境使用。

额外说明

  • USER、GROUP属于Oracle的保留关键字,作为表字段使用时必须用双引号包裹,否则会触发语法错误
  • 如果你需要对拼接的SUB值去重,Oracle 19c及以上版本可直接使用LISTAGG(DISTINCT SUB, ',')语法,更低版本需要先对原表数据按三个字段去重后再执行聚合操作

内容的提问来源于stack exchange,提问作者Godnyl Pula

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 01:36:06