SQL查询以获得聚合结果在逗号分隔符以及逐列在SQL Server中

我需要在表上写一个SQL查询,以便结果将有分组的列与逗号分隔符的聚合列。

我的表格将采用以下格式

|`````````|````````| | ID | Value | |_________|________| | 1 | a | |_________|________| | 1 | b | |_________|________| | 2 | c | |_________|________| 

预期结果应采用以下格式

  |`````````|````````| | ID | Value | |_________|________| | 1 | a,b | |_________|________| | 2 | c | |_________|________| 

您想要使用FOR XML PATH构造:

 select ID, stuff((select ', ' + Value from YourTable t2 where t1.ID = t2.ID for xml path('')), 1,2,'') [Values] from YourTable t1 group by ID 

STUFFfunction是摆脱领先的', '

你也可以在这里看到另一个例子:

  • 两个表之间的SQL相同单位需要1个单元中的订单号
  • SQL和Coldfusion左连接表获取重复的结果作为一列中的列表

只是为了一个平衡的观点,你也可以用CTE做这个,但是它不如我认为的交叉应用方法。 如果它不起作用,我已经编码了这个蹄。

 WITH CommaDelimitedCTE (RowNumber,ID,[Value],[Values]) AS ( SELECT 1,MT.ID , MIN(MT.Value), CAST(MIN(MT.Value) AS VARCHAR(8000)) FROM MyTable MT GROUP BY MT.ID UNION ALL SELECT CT.RowNumber + 1, MT.ID, MT.Value, CT.[Values] + ', ' + MT.Value FROM MyTable MT INNER JOIN CommaDelimitedCTE CT ON CT.ID = MT.ID WHERE MT.[Value] > CT.[Value] ) Select CommaDelimitedCTE.* from CommaDelimitedCTE INNER JOIN (SELECT MT.ID,MAX(RowNumber) as MaxRowNumber from CommaDelimitedCTE GROUP BY MT.ID) Q on Q.MT.ID = CommaDelimitedCTE.MT.ID AND Q.MaxRowNumber = CommaDelimitedCTE.RowNumber