SELECT Name1, Name2, Value FROM mytable gives me the following result set:
Name1 Name2 Value
A P1 1
A P2 1
A P3 2
B P1
I don't have SQL Server running here at work so this may not by completely syntatically correct but one approach would be cross tabulation
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 variable number of columns you could 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)