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

求助:基于Contract_Id分组实现多行列值逗号分隔的SQL解决方案

SQL解决方案:分组合并字段并汇总数值

针对你的需求,这里提供两种可行的SQL方案,适配不同版本的SQL Server:

方案一:兼容SQL Server 2016及更早版本(使用XML PATH)

你的原查询问题在于未关联分组条件、字段名错误,且子查询无需额外GROUP BY。修正后的代码如下:

SELECT 
    Contract_Id,
    -- 按Contract_Id分组合并Site_Name为逗号分隔字符串
    STUFF((
        SELECT ',' + Site_Name
        FROM #Tbl_Practice t2
        WHERE t2.Contract_Id = t1.Contract_Id  -- 关联外层分组的Contract_Id
        FOR XML PATH(''), TYPE
    ).value('.', 'NVARCHAR(MAX)'), 1, 1, '') AS Site_Name,
    -- 汇总当前分组的Hours总和
    SUM(Hours) AS Hours
FROM #Tbl_Practice t1
GROUP BY Contract_Id
ORDER BY Contract_Id;

方案二:SQL Server 2017及以上版本(使用STRING_AGG函数)

如果你的SQL Server版本支持,STRING_AGG函数可以更简洁地实现字段合并:

SELECT 
    Contract_Id,
    STRING_AGG(Site_Name, ',') AS Site_Name,  -- 直接合并同组Site_Name
    SUM(Hours) AS Hours
FROM #Tbl_Practice
GROUP BY Contract_Id
ORDER BY Contract_Id;

输出结果

两种方案执行后都会得到你期望的结果:

Contract_Id Site_Name   Hours
1           X,Y         40
2           X           20

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 12:01:02