это можно сделать с помощью оператора PIVOT
select *
from yourtable
pivot
(
max(Val)
for Name in ([Kunjan], [Shone], [Peudd])
) p
или условный CASE
оператор. Есть много примеров, просто сделайте поиск по нему
РЕДАКТИРОВАТЬ: для динамического случая
declare @sql nvarchar(max),
@col nvarchar(max)
select @col = isnull(@col + ',', '') + Name
from yourtable
group by Name
print @col
select @sql =
'
select *
from youtable
pivot
(
max(Val)
for Name in (' + @col + ')
) p
'
print @sql
exec sp_executesql @sql