sql 2005加入结果

Sen*_*nut 0 sql sql-server-2005

HI,

使用Microsoft SQL Server 2005:

我有一个表"测试":

id,link_id,name

1 11 test1

2 11 test2

3 11 test3

4 12 test4

有没有办法查询这个,并返回由"link_id"分组的结果,并加入名称?

例如,

SELECT link_id,名称FROM test WHERE ???????

结果:

link_id,名称

11 test1,test2,test3

12测试4

And*_*mar 5

执行此操作的blackbox方法是使用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)
Run Code Online (Sandbox Code Playgroud)

对于每一行,CROSS APPLY执行应用的子查询.在这种情况下,对于link_id 11和12,子查询被调用两次.子查询然后滥用FOR XML运算符将字符串添加到一起.

如果您运行查询,它将打印:

11   test1, test2, test3, 
12   test4, 
Run Code Online (Sandbox Code Playgroud)