Using CASE statements...
SELECT
user_id,
MAX(CASE WHEN prop_name = 'FirstName' THEN prop_value END) AS FirstName,
MAX(CASE WHEN prop_name = 'LastName' THEN prop_value END) AS LastName,
MAX(CASE WHEN prop_name = 'Age' THEN prop_value END) AS Age
FROM
yourTable
GROUP BY
user_id
Note: This assumes that no user_id has more the one value for any prop_name, and does not do any casting to different datatypes, but you can add that in if necessary.
Alternatively, you could lookup how to PIVOT in SQL. Though I know many people are put-off by this and prefer to use the above CASE/Aggregate method. In either version you must know in advance what columns you want as a result, it can't be done to a dynamic number of columns without dynamic SQL.
EDIT Pivot example due to use of deprecated NTEXT type.
SELECT
pvt.user_id, [LastName], [FirstName], [Age]
FROM
yourTable
PIVOT
( prop_value FOR prop_name IN ( [LastName], [FirstName], [Age] ) ) AS pvt
ORDER BY
pvt.user_id;
JOIN
s will cause a performance issue. With appropriate indexes this will probably be as efficient or more so than pivoting. – Martin Smith