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

SQL Server中使用CAST/CASE无法将多行合并为单行字符串的问题

解决重复ID记录合并为单个字符串的问题

嘿,我来帮你搞定这个困扰!你说用了CAST或CASE的查询后,结果还是返回多行,这很正常——因为CAST只是做数据类型转换,CASE是用来处理条件逻辑,它们本身都不具备把多行记录合并成单个字符串的能力。要实现这个需求,得用对应数据库的字符串聚合拼接函数,再配合GROUP BY按ID分组才行。

下面给你列出常用数据库的解决方案,你可以根据自己用的数据库选对应的写法:

MySQL/MariaDB 写法

SELECT 
    id,
    -- 用GROUP_CONCAT拼接,SEPARATOR指定分隔符,还可以加ORDER BY排序
    GROUP_CONCAT(your_column SEPARATOR ', ') AS merged_string
FROM 
    your_table
GROUP BY 
    id;

SQL Server 2017及以上版本

SELECT 
    id,
    -- STRING_AGG是官方推荐的拼接函数,简单直观
    STRING_AGG(your_column, ', ') AS merged_string
FROM 
    your_table
GROUP BY 
    id;

SQL Server 2016及以下版本(兼容写法)

如果你的SQL Server版本比较旧,没有STRING_AGG,可以用FOR XML PATH来实现:

SELECT 
    t.id,
    -- STUFF用来去掉开头多余的分隔符
    STUFF((
        SELECT ', ' + CAST(your_column AS NVARCHAR(MAX)) -- 数值类型要先转字符串
        FROM your_table
        WHERE id = t.id
        FOR XML PATH(''), TYPE
    ).value('.', 'NVARCHAR(MAX)'), 1, 2, '') AS merged_string
FROM 
    your_table t
GROUP BY 
    t.id;

Oracle 写法

SELECT 
    id,
    -- LISTAGG支持排序,WITHIN GROUP里可以指定排序规则
    LISTAGG(your_column, ', ') WITHIN GROUP (ORDER BY your_column) AS merged_string
FROM 
    your_table
GROUP BY 
    id;

PostgreSQL 写法

SELECT 
    id,
    STRING_AGG(your_column::TEXT, ', ') AS merged_string -- 非字符串类型转TEXT
FROM 
    your_table
GROUP BY 
    id;

几个注意点:

  • 把上面的your_table换成你的实际表名,your_column换成需要合并的字段名
  • 如果要合并的字段是数值/日期类型,记得先转换成字符串类型(比如CAST、::TEXT)
  • 可以根据需求调整分隔符(比如换成; 或者换行符CHAR(10))
  • 如果需要合并后的字符串按特定顺序排列,在拼接函数里加上ORDER BY即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:18:18