Here you go:
declare @t as table (UPN int, Subject varchar(50), Result varchar(3))
insert into @t values(8152760, 'English' , '3c')
insert into @t values(8138130, 'Spanish' , '2b')
insert into @t values(8152760, 'Spanish' , '3c')
insert into @t values(8128500, 'English' , '3c')
insert into @t values(8152760, 'Mathematics' , '2b')
insert into @t values(8152760, 'French' , '2b')
select distinct t.upn,
e.Result as Enlish,
s.Result as Spanish,
f.Result as French,
m.Result as Mathematics
from @t t
left join @t e on e.UPN = t.upn and e.Subject = 'English'
left join @t s on s.UPN = t.upn and s.Subject = 'Spanish'
left join @t f on f.UPN = t.upn and f.Subject = 'French'
left join @t m on m.UPN = t.upn and m.Subject = 'Mathematics'
PIVOT
version works only with aggregation, that is why I deleted my comment )
SELECT UPN,
[English] ,
[Spanish] ,
[Mathematics] ,
[French]
FROM
(SELECT UPN, Subject, Result
FROM @t) AS SourceTable
PIVOT
(
count(Result)
FOR Subject IN ([English] ,
[Spanish] ,
[Mathematics] ,
[French])
) AS PivotTable;