Search code examples
sqlsql-serversql-server-2005t-sql

How to return multiple values in one column using T-SQL


I have a table UserAliases (UserId, Alias) with multiple aliases per user. I need to query it and return all aliases for a given user, the trick is to return them all in one column.

Example:

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

I want the query result in the following format:

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

I'm using SQL Server 2005.


Solution

  • You can use a function with 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