У меня нет SQL Server, работающего здесь, на работе, так что это может быть не полностью синтетически правильным, но одним из подходов будет кросс-табуляция
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
Для переменного числа столбцов вы можете использовать динамический 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)