我有一张表格如下:
Event ID Name
1 Bob
1 Steve
1 Tom
2 Bob
3 Steve
3 Tom
有数千个事件ID和数十个唯一名称。我想要一个SQL查询来返回下表:
Event ID Names
1 Bob, Steve, Tom
2 Bob
3 Steve, Tom
我正在寻找像SUM()
或AVG()
这样的聚合函数,除了它加入字符串而不是数学。
编辑:我在这个问题上使用了MS Access。
编辑2:我意识到这在客户端语言中是微不足道的,但我试图看看我是否可以获得全SQL解决方案。
答案 0 :(得分:0)
您没有提到您正在使用哪个DBMS,但在MySQL中它非常简单:
SELECT EventId, GROUP_CONCAT(Names)
FROM MyTable
GROUP BY EventId
在SQL Server中,它有点棘手。我通常看到的解决方案要求您使用FOR XML PATH
。你可以找到一篇关于如何做到这一点的好文章here。
答案 1 :(得分:0)
如果您使用的是SQL服务器,可以执行类似这样的操作
WITH x AS
(
SELECT event_id FROM users
GROUP BY event_id
)
SELECT x.event_id,
name = STUFF((SELECT ',' + name
FROM users WHERE event_id = x.event_id
FOR XML PATH('')), 1, 1, '')
FROM x
答案 2 :(得分:0)
在PostgreSQL中,这将是:
select EventId, string_agg(name, ',') as names
from the_table
group by EventId;
如果您希望列表中的名称排序:
select EventId, string_agg(name, ',' order by name) as names
from the_table
group by EventId