SQL Server将特定的列值转换为逗号分隔字符串



我在数据库中有一个表:

Id  Name
1   Item1
1   Item2
2   Item3
1   Item4
3   Item5

我需要如下(第3列为计数(:

1   Item1,Item2,Item4   3
2   Item3               1
3   Item5               1

SQL查询如何实现?

SQL Server具有STUFF()功能,能够为您提供帮助。

SELECT t.Id,
       Name = STUFF( (SELECT DISTINCT ','+Name 
                      FROM table 
                      WHERE Id = t.Id 
                      FOR XML PATH('')
                     ), 1, 1, ''
                   ) 
FROM table t
GROUP BY t.Id; 

SQL Server 2017推出了一种使用STRING_AGG(expression, separator)实现此目的的方法。

这是一个示例:

SELECT STRING_AGG(T.Name, ', ') FROM MyTable T where MyColumnID = 78

您甚至可以以其他方式进行格式化:

SELECT STRING_AGG(CONCAT(T.MyColumnID,' - ',T.Name), ', ') FROM MyTable T where MyColumnID = 78

我在此博客中找到了更多信息:https://database.guide/the-sql-server-equivalent-to-group_concat/

select id, group_concat(name) csv,
from Table
group by id

最新更新