これを行うブラックボックスの方法は、CROSS APPLY と FOR XML PATH を使用することです:
declare @t table (id int, link_id int, name varchar(max))
insert into @t select 1, 11, 'test1'
union all select 2, 11, 'test2'
union all select 3, 11, 'test3'
union all select 4, 12, 'test4'
select b.link_id, d.link_names
from (
select distinct link_id
from @t a
) b
cross apply (
select name + ', ' as [text()]
from @t c
where b.link_id = c.link_id
for xml path('')
) d (link_names)
行ごとに、CROSS APPLY が適用されたサブクエリを実行します。この場合、サブクエリは、link_id 11 と 12 に対して 2 回呼び出されます。次に、サブクエリは FOR XML 演算子を悪用して文字列を追加します。
クエリを実行すると、以下が出力されます:
11 test1, test2, test3,
12 test4,