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

SQL Server中如何将同ID的两行数据合并为一列?

SQL Server 数据合并解决方案

根据你提到的需求,分两种常见场景给出对应实现方式:

1. 行转列(适用Pivot的场景)

如果你的需求是将同一分组下的多行数据,按指定字段转换为列(比如把类别作为列名,对应值作为列值),用PIVOT实现:

假设原始表结构及数据如下:

订单ID品类金额
101商品A200
101商品B300
102商品A150

目标合并结果:

订单ID商品A商品B
101200300
102150NULL

对应的SQL代码:

SELECT 订单ID, 商品A, 商品B
FROM (
    SELECT 订单ID, 品类, 金额
    FROM 你的原始表名
) AS SourceData
PIVOT (
    MAX(金额) -- 若同一分组+品类有重复值,按需用SUM/MAX/MIN聚合
    FOR 品类 IN (商品A, 商品B) -- 列出要转为列的所有品类值
) AS PivotResult;

2. 同组多行字符串合并

如果你的需求是将同一分组下的多行文本合并为单个字符串(比如把同一订单的标签合并成逗号分隔的字符串),用STRING_AGG(SQL Server 2017+支持):

假设原始表结构及数据如下:

订单ID标签
101加急
101包邮
102预售

目标合并结果:

订单ID合并标签
101加急, 包邮
102预售

对应的SQL代码:

SELECT 
    订单ID,
    STRING_AGG(标签, ', ') AS 合并标签 -- 第二个参数是自定义分隔符
FROM 你的原始表名
GROUP BY 订单ID;

如果使用SQL Server 2016及更早版本,用STUFF + FOR XML PATH替代:

SELECT 
    订单ID,
    STUFF((
        SELECT ', ' + 标签
        FROM 你的原始表名 t2
        WHERE t2.订单ID = t1.订单ID
        FOR XML PATH(''), TYPE
    ).value('.', 'NVARCHAR(MAX)'), 1, 2, '') AS 合并标签
FROM 你的原始表名 t1
GROUP BY 订单ID;

如果你的实际场景和上述示例不符,提供原始表的字段名、样本数据以及目标结果的具体格式,可给出更精准的代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 23:35:51