Reputation: 349
I have two columns with values
letter number
A 1
A 2
A 3
B 1
B 2
I want two aggregated, comma-separated, values representing the distinct set of the intersections of letter
and number
.
e.g
letters numbers
A,B 1,2
A 3
Upvotes: 1
Views: 105
Reputation: 11556
What I have done is, first concatenated the letter
column group by number
column. Then given a row number partition by concatenated letters and order by number
. Then again concatenated the number
column group by the concatenated
Query
;with cte as(
select *
from (
select [number], stuff((
select ', ' + [letter]
from [your_table_name]
where ([number] = t.[number])
for xml path('')
)
, 1, 2, ''
) as letters
from [your_table_name] t
group by [number]
)t2
)
select [letters], stuff((
select ', ' + cast(number as varchar(100))
from cte
where ([letters] = t.[letters])
for xml path('')
)
, 1, 2, ''
) as [numbers]
from cte t
group by [letters];
Upvotes: 2