Вы можете группировать по UserID и использовать подзапрос для получения значений поля.
declare @T table
(
ValueID int,
UserID int,
ValueTypeID int,
ValueKey varchar(10),
Text varchar(10),
Number int
)
insert into @T values
(1, 345, 1, 'NAME', 'Bob', NULL),
(2, 345, 2, 'AGE', NULL, 30),
(3, 689, 1, 'NAME', 'Sam', NULL),
(4, 689, 2, 'AGE', NULL, 45)
select T1.UserID,
(select [Text]
from @T as T2
where T1.UserID = T2.UserID and
T2.ValueKey = 'NAME') as Name,
(select Number
from @T as T2
where T1.UserID = T2.UserID and
T2.ValueKey = 'AGE') as Age
from @T as T1
group by T1.UserID