Question

Je sais que vous pouvez le faire, car je l’ai déjà vu faire une fois, mais j’oublie où et jusqu’à présent, je n’ai pas besoin de le faire.

J'ai une table appelée Employees, qui contient diverses données sur les employés (duh). J'ai besoin d'une requête qui sélectionne le nom et le prénom de toutes les lignes de la table, puis les contienne dans une chaîne délimitée par des virgules.

Par exemple, j'ai quelques lignes (beaucoup plus que cela en fait, mais dans l'intérêt de cette question, supposons simplement deux) de données qui ressemblent à:

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

Je dois sélectionner un élément capable de renvoyer les données susmentionnées sous la forme suivante:

Richard Prescott, Jill Sentieri, Carol Winger

Merci d’avance pour votre aide!

Était-ce utile?

La solution

Utilisez coalesce. Quelque chose comme ça:

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

Autres conseils

C'est la méthode la plus efficace que j'ai trouvée. Cela nécessite SQL Server, mais cela ressemble à ce que vous utilisez.

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

L'idée est que vous pouvez tirer parti de la possibilité d'utiliser un nom de balise vide avec for for chemin xml ('') pour obtenir la concaténation de chaînes sur plusieurs lignes. Le contenu (..., 1,2, '') supprime simplement la virgule.

C’est VRAIMENT rapide.

vous pouvez écrire un fichier UDF pour le faire

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

Peut-être que cela peut aider. Cette question a déjà été posée. Comment créer une fonction SQL Server pour " rejoindre " Plusieurs lignes d'une sous-requête dans un seul champ délimité?

Si vous utilisez MySQL, ils ont une excellente fonction appelée GROUP_CONCAT qui fait justement cela. http: //dev.mysql. com / doc / refman / 5.0 / fr / group-by-functions.html # function_group-concat

ce n'est pas parfait, mais cela vous mènera la plupart du chemin

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top