我正在处理一个查询,该查询将从表中收集数据并为报告显示数据。
数据如下所示:
Player Score
001 10
001 20
002 20
002 20
001 10
002 10
003 20
002 20
001 10
我想让它像这样显示它
Player Score
001 10,20
002 10,20
003 20
但我得到的是score列中所有数据的组合列表,如下所示
Player Score
001 10,20,10,10
002 20,20,10,20
003 20
有没有人知道该怎么做?
发布于 2012-09-29 02:22:32
对于SQL Server,您可以使用:
select player,
stuff((SELECT distinct ', ' + cast(score as varchar(10))
FROM yourtable t2
where t2.player = t1.player
FOR XML PATH('')),1,1,'')
from yourtable t1
group by player
发布于 2013-04-13 03:24:25
对于另一个RDBMS来说,有点晚了,有点离题,但我发现这个线程正在Postgres中寻找这个问题的解决方案。我找到了一个,所以如果其他人需要在Pg中解决这个问题:
SELECT string_agg(DISTINCT <column>,'delimiter') FROM <table> GROUP BY <column2>
发布于 2020-09-23 22:39:25
之前接受的答案在SQL 2017中已被STRING_AGG取代:
SELECT Player, STRING_AGG(Score,', ') FROM YourTable GROUP BY Player
不需要使用笨拙的FOR XML语法。
我在100K行上并排运行了这个和公认的答案。Accepted花了90秒,STRING_AGG版本用了不到1秒。
https://stackoverflow.com/questions/12645297
复制相似问题