106 votes

Convertir plusieurs lignes en une avec une virgule comme séparateur

Si j'émets SELECT username FROM Users j'obtiens ce résultat :

username -------- Paul JohnMary





mais ce dont j'ai vraiment besoin, c'est d'une ligne avec toutes les valeurs séparées par des virgules, comme ceci :

Paul, Jean, Marie

Comment je fais ça ?

146voto

Hogan Points 30189
 select
   distinct  
    stuff((
        select ',' + u.username
        from users u
        where u.username = username
        order by u.username
        for xml path('')
    ),1,1,'') as userlist
from users
group by username

avait une faute de frappe avant, les travaux ci-dessus

114voto

mwigdahl Points 8768

Ça devrait marcher pour toi. Testé jusqu'à SQL 2000.

create table #user (username varchar(25))

insert into #user (username) values ('Paul')
insert into #user (username) values ('John')
insert into #user (username) values ('Mary')

declare @tmp varchar(250)
SET @tmp = ''
select @tmp = @tmp + username + ', ' from #user

select SUBSTRING(@tmp, 0, LEN(@tmp))

12voto

user358574 Points 1

en se basant sur la réponse mwigdahls. si vous avez également besoin de faire un regroupement ici, c'est comment le faire ressembler

group, csv
'group1', 'paul, john'
'group2', 'mary'

    --drop table #user
create table #user (groupName varchar(25), username varchar(25))

insert into #user (groupname, username) values ('apostles', 'Paul')
insert into #user (groupname, username) values ('apostles', 'John')
insert into #user (groupname, username) values ('family','Mary')


select
    g1.groupname
    , stuff((
        select ', ' + g.username
        from #user g        
        where g.groupName = g1.groupname        
        order by g.username
        for xml path('')
    ),1,2,'') as name_csv
from #user g1
group by g1.groupname

8voto

Rashmi Kant Points 117

Vous pouvez utiliser cette requête pour effectuer la tâche ci-dessus :

DECLARE @test NVARCHAR(max)  
SELECT @test = COALESCE(@test + ',', '') + field2 FROM #test
SELECT field2 = @test 

Pour plus de détails et des explications étape par étape, visitez le lien suivant http://oops-solution.blogspot.com/2011/11/sql-server-convert-table-column-data.html

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X