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

如何用SQL合并列值为字符串?是否需使用SQL Cursor?

嘿,完全不用搞游标这么麻烦!用简单的SQL聚合函数就能轻松实现你要的合并需求——看起来你是想按第一列(比如叫col1)分组,把同一组内第二列(col2)的数值合并成逗号分隔的字符串对吧?不同数据库有对应的现成函数,我给你整理了几个常用场景的写法:

MySQL/MariaDB

用GROUP_CONCAT()函数就能直接搞定,支持去重和排序:

-- 去重合并(把同一col1下的重复col2值只保留一个)
SELECT 
    col1,
    GROUP_CONCAT(DISTINCT col2 ORDER BY col2 SEPARATOR ',') AS merged_col2
FROM 
    your_table
GROUP BY 
    col1;

-- 保留重复值的合并(不需要去重就去掉DISTINCT)
SELECT 
    col1,
    GROUP_CONCAT(col2 ORDER BY col2 SEPARATOR ',') AS merged_col2
FROM 
    your_table
GROUP BY 
    col1;

SQL Server

2017及以上版本可以直接用STRING_AGG(),非常简洁:

SELECT 
    col1,
    STRING_AGG(DISTINCT col2, ',') WITHIN GROUP (ORDER BY col2) AS merged_col2
FROM 
    your_table
GROUP BY 
    col1;

如果是2017之前的老版本,可以用FOR XML PATH的写法来模拟:

SELECT 
    DISTINCT col1,
    STUFF((
        SELECT ',' + CAST(col2 AS VARCHAR)
        FROM your_table t2
        WHERE t2.col1 = t1.col1
        ORDER BY col2
        FOR XML PATH(''), TYPE
    ).value('.', 'VARCHAR(MAX)'), 1, 1, '') AS merged_col2
FROM 
    your_table t1;

PostgreSQL

用STRING_AGG()函数,注意要把数值类型转成文本:

SELECT 
    col1,
    STRING_AGG(DISTINCT col2::TEXT, ',' ORDER BY col2) AS merged_col2
FROM 
    your_table
GROUP BY 
    col1;

Oracle

11g及以上版本用LISTAGG()函数:

SELECT 
    col1,
    LISTAGG(DISTINCT col2, ',') WITHIN GROUP (ORDER BY col2) AS merged_col2
FROM 
    your_table
GROUP BY 
    col1;

这些写法都是纯SQL的聚合操作,完全不需要用到游标这种复杂的循环逻辑,选对应你数据库的写法就行~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:09:35