使用T-SQL进行分组、连接和计数
我有两列ProductID和DefectCode的表Product,如左图所示,我需要按ProductID汇总数据分组,并连接DefectCode,还需要计算每个代码的重复次数,如右图所示 我设法使用以下代码进行分组和连接,但无法计算每个缺陷代码的重复次数使用T-SQL进行分组、连接和计数,sql,sql-server,Sql,Sql Server,我有两列ProductID和DefectCode的表Product,如左图所示,我需要按ProductID汇总数据分组,并连接DefectCode,还需要计算每个代码的重复次数,如右图所示 我设法使用以下代码进行分组和连接,但无法计算每个缺陷代码的重复次数 select ProductID, ISNULL(STUFF( (SELECT distinct '-' + CONVERT(varchar(10), DefectCode)
select ProductID,
ISNULL(STUFF(
(SELECT distinct '-' + CONVERT(varchar(10), DefectCode)
FROM Product
WHERE ProductID=a.ProductID
FOR XML PATH (''))
, 1, 1, '') ,'') AS Defects
from Product as a
group by ProductID
左侧为样本数据,右侧为所需结果
您可以在子查询中使用聚合:
SELECT p.ProductID,
ISNULL(STUFF( (SELECT CONCAT('-', p2.DefectCode, '(', COUNT(*), ')')
FROM Product p2
WHERE p2.ProductID = p.ProductID
GROUP BY p2.DefectCode
FOR XML PATH ('')
), 1, 1, ''
), '') AS Defects
FROM Product p
GROUP BY p.ProductID;
我假设您使用的是不支持STRING\u AGG()
的较旧版本的SQL Server