You can do this easily with conditional aggregation. This has been asked and answered hundreds of times but if it is a new concept it would be hard to know what search terms to use. This is complete with consumable sample data.
declare @Users table
(
UserID int
, Name varchar(10)
)
insert @Users values
(1, 'Joe')
, (2, 'Mary')
declare @Permissions table
(
UserID int
, Permission varchar(10)
)
insert @Permissions values
(1, 'P15')
, (2, 'P5')
, (2, 'P330')
select x.UserID
, Permit1 = max(case when x.RowNum = 1 then x.Permission end)
, Permit2 = max(case when x.RowNum = 2 then x.Permission end)
, Permit3 = max(case when x.RowNum = 3 then x.Permission end)
, Permit4 = max(case when x.RowNum = 4 then x.Permission end)
, Permit5 = max(case when x.RowNum = 5 then x.Permission end)
, Permit6 = max(case when x.RowNum = 6 then x.Permission end)
, Permit7 = max(case when x.RowNum = 7 then x.Permission end)
, Permit8 = max(case when x.RowNum = 8 then x.Permission end)
from
(
select u.UserID
, p.Permission
, RowNum = ROW_NUMBER() over(partition by u.UserId order by p.Permission)
from @Users u
join @Permissions p on p.UserID = u.UserID
) x
group by x.UserID