Pergunta

Sei que você pode fazer isso, porque já vi isso uma vez antes, mas esqueço onde e até agora não preciso fazer isso.

Eu tenho uma tabela chamada funcionários e possui vários dados de funcionários (DUH). Preciso de uma consulta que faça uma seleção no primeiro e sobrenome de todas as linhas da tabela e, em seguida, contenha todas elas em uma string delimitada por vírgula.

Por exemplo, tenho algumas linhas (muito mais do que isso, mas, por causa dessa pergunta, apenas assumem dois) de dados que parecem:

FName    LName
-------  -----
Richard  Prescott
Jill     Sentieri
Carol    Winger

Preciso uma seleção que possa retornar os dados acima mencionados neste formulário:

Richard Prescott, Jill Sentieri, Carol Winger

Agradeço antecipadamente por sua ajuda!

Foi útil?

Solução

Usar coalesce. Algo assim:

DECLARE @Names varchar(1000)
SELECT @Names = COALESCE(@Names + ', ', '') + Name
FROM Employees

Outras dicas

Este é o método mais eficiente que encontrei. Requer SQL Server, mas parece que é isso que você está usando.

select stuff((
    select ', ' + fName + ' ' + lName
    from Employees
    order by lName, fName /* Optional */
    for xml path('')
), 1, 2, '');

A idéia é que você possa aproveitar a capacidade de usar um nome de tag vazio com o caminho XML ('') para obter concatenação de strings entre linhas. O material (..., 1,2, '') apenas remove a vírgula líder.

Isso é muito rápido.

você pode escrever um UDF para fazer isso

CREATE FUNCTION [dbo].[fnc_GetEmpList](
@CompId numeric
) RETURNS nvarchar(1000)
BEGIN

declare @str nvarchar(1000)
set @str =''

select  @str = @str + ',' + FirstName + ' ' + LastName from Employees


--remove the last comma
if(@str<>'')
    set @str = right(@str,len(@str)-1)

return @str


END

Se você estiver usando o MySQL, eles têm uma ótima função chamada group_concat, isso faz exatamente isso. http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat

Isso não é perfeito, mas vai te levar a maior parte do caminho lá

declare @count int
declare @i int
declare @string nvarchar(max)
declare @name nvarchar(100)

declare @Employees (EmpName nvarchar(100), ID int identity(1,1)

insert into @Employees (EmpName)
select FirstName + ' ' + LastName
from Employees


select @count=count(*) from @Employees
set @i=1
set @string=''


while (@i<=@count)
begin

    select @name = EmpName from @Employees where ID=@i

    set @string = @string + ',' + @name

    set @i=@i+1
end
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top