求助:基于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
相关产品推荐
相关产品推荐

