Объединить несколько строк в один столбец без дубликатов
Я работаю над запросом, который будет собирать данные из таблицы и отображать данные для отчета.
Данные выглядят следующим образом:
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
Но все, что я получаю, это комбинированный список всех данных в столбце оценки, подобный этому
Player Score
001 10,20,10,10
002 20,20,10,20
003 20
Есть ли у кого-нибудь идея, как сделать эту работу?
Ответы
Ответ 1
Для 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
Ответ 2
Немного поздно и немного не по теме, как для другой RDBMS, но я нашел этот поток, который ищет решение этой проблемы в Postgres. Я нашел один, поэтому, если кому-то еще нужно решить эту проблему в Pg:
SELECT string_agg(DISTINCT <column>,'delimiter') FROM <table> GROUP BY <column2>
Ответ 3
UPDATE AllNews
SET ArticleSource = pp.[NewsText]
FROM AllNews AS an
INNER JOIN ( select t1.Id,
stuff((SELECT distinct '.' + t2.[Text]
FROM NewsPhotos t2
where t2.NewsId = t1.Id
FOR XML PATH('')),1,1,'') as [NewsText]
from AllNews t1
group by t1.Id) as pp
ON pp.Id = an.Id