47 votes

Comment retourner plusieurs valeurs dans une colonne (T-SQL) ?

J'ai une table [UserAliases] (UserId, Alias) avec plusieurs alias par utilisateur. J'ai besoin de l'interroger et de retourner tous les alias pour un utilisateur donné, l'astuce est de les retourner tous dans une seule colonne.

Exemple :

UserId/Alias
1/MrX
1/MrY
1/MrA
2/Abc
2/Xyz

Je veux le résultat de la requête dans le format suivant :

UserId/Alias
1/ MrX, MrY, MrA
2/ Abc, Xyz

Merci.

J'utilise MSSQL Server 2005.

p.s. Une requête t-sql réelle serait appréciée :)

57voto

Scott Nichols Points 3366

Vous pouvez utiliser une fonction avec COALESCE.

CREATE FUNCTION [dbo].[GetAliasesById]
(
    @userID int
)
RETURNS varchar(max)
AS
BEGIN
    declare @output varchar(max)
    select @output = COALESCE(@output + ', ', '') + alias
    from UserAliases
    where userid = @userID

    return @output
END

GO

SELECT UserID, dbo.GetAliasesByID(UserID)
FROM UserAliases
GROUP BY UserID

GO

18voto

leoinfo Points 3364

Eh bien... Je vois qu'une réponse a déjà été acceptée... mais je pense que vous devriez quand même voir une autre solution :

/* EXAMPLE */
DECLARE @UserAliases TABLE(UserId INT , Alias VARCHAR(10))
INSERT INTO @UserAliases (UserId,Alias) SELECT 1,'MrX'
     UNION ALL SELECT 1,'MrY' UNION ALL SELECT 1,'MrA'
     UNION ALL SELECT 2,'Abc' UNION ALL SELECT 2,'Xyz'

/* QUERY */
;WITH tmp AS ( SELECT DISTINCT UserId FROM @UserAliases )
SELECT 
    LEFT(tmp.UserId, 10) +
    '/ ' +
    STUFF(
            (   SELECT ', '+Alias 
                FROM @UserAliases 
                WHERE UserId = tmp.UserId 
                FOR XML PATH('') 
            ) 
            , 1, 2, ''
        ) AS [UserId/Alias]
FROM tmp

/* -- OUTPUT
  UserId/Alias
  1/ MrX, MrY, MrA
  2/ Abc, Xyz    
*/

3voto

Mike McAllister Points 871

Jetez un coup d'œil à ce fil de discussion est déjà sur StackOverflow il vous donne commodément un exemple T-SQL.

2voto

Wayne Points 12304

2voto

Ryan Rinaldi Points 1683

Mon patron a écrit un article sur ce sujet en 2003 : Concaténation avec COALESCE

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