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 实现的?
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)
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/