GROUP BY but get all values from other column

Solution 1:

Using MySQL you can use GROUP_CONCAT(expr)

This function returns a string result with the concatenated non-NULL values from a group. It returns NULL if there are no non-NULL values. The full syntax is as follows:

GROUP_CONCAT([DISTINCT] expr [,expr ...]
             [ORDER BY {unsigned_integer | col_name | expr}
                 [ASC | DESC] [,col_name ...]]
             [SEPARATOR str_val])

Something like

SELECT ID, GROUP_CONCAT(name) GroupedName
FROM Table1
GROUP BY ID

SQL Fiddle DEMO

Solution 2:

For SQL Server (before 2017) use FOR XML clause and STUFF() function for that:

SELECT distinct id, name = 
    STUFF((SELECT ' , ' + name
           FROM Table1 b 
           WHERE b.id = a.id 
          FOR XML PATH('')), 1, 2, '')
FROM Table1 a
GROUP BY id;

UPDATE

With SQL Server 2017, you can simply use STRING_AGG() function to achieve that:

SELECT ID, STRING_AGG (name, ', ') AS Name
FROM Table1
GROUP BY ID

See this SQLFiddle