首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将多行合并为一列,不存在重复项

将多行合并为一列,不存在重复项
EN

Stack Overflow用户
提问于 2012-09-29 02:18:16
回答 4查看 102.5K关注 0票数 33

我正在处理一个查询,该查询将从表中收集数据并为报告显示数据。

数据如下所示:

代码语言:javascript
复制
Player Score
001      10
001      20
002      20
002      20
001      10
002      10
003      20
002      20
001      10

我想让它像这样显示它

代码语言:javascript
复制
Player Score
001    10,20
002    10,20
003    20

但我得到的是score列中所有数据的组合列表,如下所示

代码语言:javascript
复制
Player Score
001    10,20,10,10
002    20,20,10,20
003    20

有没有人知道该怎么做?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-09-29 02:22:32

对于SQL Server,您可以使用:

代码语言:javascript
复制
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
票数 56
EN

Stack Overflow用户

发布于 2013-04-13 03:24:25

对于另一个RDBMS来说,有点晚了,有点离题,但我发现这个线程正在Postgres中寻找这个问题的解决方案。我找到了一个,所以如果其他人需要在Pg中解决这个问题:

代码语言:javascript
复制
SELECT string_agg(DISTINCT <column>,'delimiter') FROM <table> GROUP BY <column2>
票数 6
EN

Stack Overflow用户

发布于 2020-09-23 22:39:25

之前接受的答案在SQL 2017中已被STRING_AGG取代:

代码语言:javascript
复制
SELECT Player, STRING_AGG(Score,', ') FROM YourTable GROUP BY Player

不需要使用笨拙的FOR XML语法。

我在100K行上并排运行了这个和公认的答案。Accepted花了90秒,STRING_AGG版本用了不到1秒。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12645297

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档