create table TestTable (name nvarchar(10),course varchar(10))
insert into TestTable values('stu1', 'a')
insert into TestTable values('stu1', 'b')
insert into TestTable values('stu1', 'c')
insert into TestTable values('stu2', 'a')
insert into TestTable values('stu2', 'b')
go
select name ,
max(case px when 1 then course else '' end) course1,
max(case px when 2 then course else '' end) course2,
max(case px when 3 then course else '' end) course3
from
(
select t.* , px = row_number() over(partition by name order by course) from TestTable t
) m
group by name