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

如何对SQL表中相同分组的指定列值进行拼接合并

SQL查询实现同组数值拼接

你的需求是将数据表中col1和col2取值相同的行,把对应的value字段用逗号拼接合并,同时保留该组中最小的id值。以下是不同数据库环境下的实现语句:

MySQL/MariaDB

SELECT 
    MIN(id) AS id,
    col1,
    col2,
    GROUP_CONCAT(value ORDER BY value SEPARATOR ',') AS merged_values
FROM 
    your_table
GROUP BY 
    col1, col2;
  • 说明:通过GROUP BY col1, col2对相同组合的行分组,MIN(id)提取每组最小的id,GROUP_CONCAT按value顺序拼接数值,用逗号分隔。

PostgreSQL

SELECT 
    MIN(id) AS id,
    col1,
    col2,
    STRING_AGG(value::TEXT, ',' ORDER BY value) AS merged_values
FROM 
    your_table
GROUP BY 
    col1, col2;
  • 说明:PostgreSQL使用STRING_AGG实现字符串聚合,需要将数值类型的value转为文本类型,同时指定排序规则。

SQL Server

2017及以上版本(支持STRING_AGG)

SELECT 
    MIN(id) AS id,
    col1,
    col2,
    STRING_AGG(value, ',' ) WITHIN GROUP (ORDER BY value) AS merged_values
FROM 
    your_table
GROUP BY 
    col1, col2;

旧版本(使用FOR XML PATH)

SELECT 
    MIN(t.id) AS id,
    t.col1,
    t.col2,
    STUFF((
        SELECT ',' + CAST(value AS VARCHAR)
        FROM your_table
        WHERE col1 = t.col1 AND col2 = t.col2
        ORDER BY value
        FOR XML PATH(''), TYPE
    ).value('.', 'VARCHAR(MAX)'), 1, 1, '') AS merged_values
FROM 
    your_table t
GROUP BY 
    t.col1, t.col2;
  • 说明:旧版本通过子查询结合FOR XML PATH生成拼接字符串,再用STUFF去掉开头多余的逗号。

Oracle

SELECT 
    MIN(id) AS id,
    col1,
    col2,
    LISTAGG(value, ',') WITHIN GROUP (ORDER BY value) AS merged_values
FROM 
    your_table
GROUP BY 
    col1, col2;
  • 说明:Oracle使用LISTAGG函数完成聚合拼接,支持指定排序和分隔符。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 03:55:24