我在数据库中有一个表:
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