sql >> Database >  >> RDS >> Sqlserver

sql 2005 join resultaten

De blackbox-manier om dit te doen is met een CROSS APPLY en 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)

Voor elke rij voert een CROSS APPLY de toegepaste subquery uit. In dit geval wordt de subquery twee keer aangeroepen, voor link_id 11 en 12. De subquery misbruikt vervolgens de FOR XML-operator om de strings bij elkaar op te tellen.

Als u de query uitvoert, wordt afgedrukt:

11   test1, test2, test3, 
12   test4, 


  1. Ruby datetime geschikt voor mysql vergelijking

  2. Rijen in datastore verwijderen op tijdbereik

  3. Hoe een rij met maximale waarde in de mysql-tabel te selecteren?

  4. Hoe zorg ik ervoor dat een oudere versie van OracleClient lokaal met .NET werkt?