I am attempting to make a column in which it is a comma delimited list of other columns where the id is the same. How can I take the query I currently have, and update it to get the output that I expect?
T1
PK |
---|
1 |
2 |
T2
ID | Name | T1.PK |
---|---|---|
1 | Apple | 1 |
2 | Pear | 1 |
3 | Orange | 1 |
4 | Cat | 2 |
5 | Dog | 2 |
My hope is I can join these tables and get the following result.
PK | Name |
---|---|
1 | Apple, Pear, Orange |
2 | Cat, Dog |
I have a rough idea of how to accomplish this, but I do not see how to separate the list, instead I will get Apple, Pear, Orange, Cat, Dog for each row instead of them being separated. Here is the query I am currently working with.
select t1.PK,
stuff(
(select distinct ', ' Name
from t2
for XML PATH ("")), 1, 2, '') Name
from t1
left join t2
CodePudding user response:
In new SQL Server DB's (since SQL Server 2017), it's also possible to use STRING_AGG
for this purpose:
SELECT t1.pk, STRING_AGG (t2.name,', ') AS name
FROM t1 JOIN t2 ON t1.pk = t2.[t1.pk]
GROUP BY t1.pk;
CodePudding user response:
select t1.PK,
stuff(
(select ', ' Name
from t2
where t2.[t1.PK] = t1.PK
for XML PATH ('')), 1, 1, '') Name
from t1
I answered this question about 12 years ago