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

May*_*ank 0 sql sql-server string-aggregation

我在数据库中有一个表,如下所示:

Id  Name
1   Item1
1   Item2
2   Item3
1   Item4
3   Item5
Run Code Online (Sandbox Code Playgroud)

我需要如下输出(第三列是计数):

1   Item1,Item2,Item4   3
2   Item3               1
3   Item5               1
Run Code Online (Sandbox Code Playgroud)

它是如何通过 SQL Query 实现的?

Yog*_*rma 6

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; 
Run Code Online (Sandbox Code Playgroud)


gbd*_*vid 6

SQL Server 2017 引入了一种更简单的方法来使用STRING_AGG(expression, separator).

这是一个例子:

SELECT STRING_AGG(T.Name, ', ') FROM MyTable T where MyColumnID = 78
Run Code Online (Sandbox Code Playgroud)

您甚至可以通过其他方式尝试格式化,例如:

SELECT STRING_AGG(CONCAT(T.MyColumnID,' - ',T.Name), ', ') FROM MyTable T where MyColumnID = 78
Run Code Online (Sandbox Code Playgroud)

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