I don't have SQL Server working here at work, so this may not be completely correct, but one approach would be a crosstab
SELECT name2 , SUM(CASE WHEN name1 = 'A' THEN value END) AS A , SUM(CASE WHEN name1 = 'B' THEN value END) AS B FROM table GROUP BY name2
For a variable number of columns, you can use dynamic SQL:
DECLARE @sql varchar(max) SELECT @sql = COALESCE(@sql+',','') + 'SUM(CASE WHEN nane1 = '''+name1+''' THEN value END) AS ['+name1']' FROM table SET @sql = 'SELECT name2, ' +@sql +' FROM table GROUP BY name2' EXEC(@sql)
source share