O script é bem simples e pode ser transformado numa função que retorne string (varchar) para ser usada em outras queries.
No exemplo abaixo criei uma tabela de pessoas, com Id, Nome e Idade. No cenário quero recuperar numa única coluna e linha quais as pessoas com idade > 20, separadas por ponto e virgula.
Vamos lá?
--// Cria tabela de exemplo num banco de dados do SQL Server
Create table Pessoas (Id Int Identity(1,1), Nome Varchar(100), Idade int)
--// Insere alguns valores na tabela para teste
Insert into Pessoas Values ('Andre', 20)
Insert into Pessoas Values ('Beatriz', 22)
Insert into Pessoas Values ('Carlos', 23)
--// Declara variável que receberá a lista (pode ser maior)
Declare @Result Varchar(200)
--// Inicia variável vazia por que varchar não concatena com null
Set @Result = ''
--// Seleciona cada registro que atende o select e concatena com a variável
Select @Result = @Result + Nome + '; '
From Pessoas
Where Idade > 20
--// Se houve resultado, retira o último caractere (;)
If @Result <> ''
Begin
--// Retira o último caractere ";"
Set @Result = SUBSTRING(@Result, 1, len(@Result)-1)
End
--// Retorna
Select @Result as Pessoas
No exemplo implementei ainda uma regra para tirar o ponto e virgula do final da variável. O resultado é o seguinte:
Coisa simples, mas evita alguns loops, seja com cursor ou tabela temporária, que é a primeira coisa que pensamos diante de uma necessidade como essa.
Simples né? Espero que útil também!