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

SQL多行合并为一行:相同父类下合并重复字段行,求示例查询

多行合并为一行的SQL解决方案

先纠正你原语句的问题:

  • 用group by column1会把所有行合并成一组(因为column1全是AAA),不符合分成两行的需求
  • column2和column3既不在group by子句中,也没有使用聚合函数,多数SQL数据库会直接报错

根据你的场景(按column2+column3的相同值组分组合并),以下是不同主流数据库的实现方案:

MySQL(5.7+)

使用GROUP_CONCAT()函数聚合字符串:

SELECT 
  column1,
  column2,
  column3,
  GROUP_CONCAT(需要合并的列名 SEPARATOR ',') AS 合并后的列名
FROM tablename
GROUP BY column1, column2, column3;

如果需要去重,可添加DISTINCT:GROUP_CONCAT(DISTINCT 需要合并的列名 SEPARATOR ',')

SQL Server(2017+)

使用STRING_AGG()函数:

SELECT 
  column1,
  column2,
  column3,
  STRING_AGG(需要合并的列名, ',') AS 合并后的列名
FROM tablename
GROUP BY column1, column2, column3;

去重写法:STRING_AGG(DISTINCT 需要合并的列名, ',')

PostgreSQL

使用STRING_AGG()函数:

SELECT 
  column1,
  column2,
  column3,
  STRING_AGG(需要合并的列名, ',' ORDER BY 需要合并的列名) AS 合并后的列名
FROM tablename
GROUP BY column1, column2, column3;

去重写法:STRING_AGG(DISTINCT 需要合并的列名, ',' ORDER BY 需要合并的列名)

Oracle(11g+)

使用LISTAGG()函数:

SELECT 
  column1,
  column2,
  column3,
  LISTAGG(需要合并的列名, ',') WITHIN GROUP (ORDER BY 需要合并的列名) AS 合并后的列名
FROM tablename
GROUP BY column1, column2, column3;

去重需配合子查询先去重再聚合:

SELECT 
  column1,
  column2,
  column3,
  LISTAGG(col, ',') WITHIN GROUP (ORDER BY col) AS 合并后的列名
FROM (
  SELECT DISTINCT column1, column2, column3, 需要合并的列名 AS col
  FROM tablename
) t
GROUP BY column1, column2, column3;

补充说明

  • 将上述代码中的需要合并的列名替换为你实际要合并的字段名称
  • 如果你的场景仅需保留每组一行(无需合并其他列值),直接按column2和column3分组取任意一行即可:
SELECT 
  MAX(column1) AS column1,
  column2,
  column3
FROM tablename
GROUP BY column2, column3;

(因column1全为AAA,MAX(column1)结果仍为AAA)

内容的提问来源于stack exchange,提问作者D E V A

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 12:10:22