使用T-SQL进行分组、连接和计数

使用T-SQL进行分组、连接和计数,sql,sql-server,Sql,Sql Server,我有两列ProductID和DefectCode的表Product,如左图所示,我需要按ProductID汇总数据分组,并连接DefectCode,还需要计算每个代码的重复次数,如右图所示 我设法使用以下代码进行分组和连接,但无法计算每个缺陷代码的重复次数 select ProductID, ISNULL(STUFF( (SELECT distinct '-' + CONVERT(varchar(10), DefectCode)

我有两列ProductID和DefectCode的表Product,如左图所示,我需要按ProductID汇总数据分组,并连接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