delimiter $$
drop procedure if exists student_score $$
create procedure student_score()
begin
declare ifStmt varchar(2000) default '';
declare done boolean default false;
declare c varchar(40);
declare cur cursor for select distinct course from scores;
declare continue handler for not found set done=true;
set @queryStmt:='';
open cur;
fetch cur into c;
while not done do
set ifStmt=concat(ifStmt,',MAX(IF(course=\'',c,'\',score,0)) AS ',c);
fetch cur into c;
end while;
close cur;
set @queryStmt:=concat('select student',ifStmt,' from scores group by student');
prepare stmt from @queryStmt;
execute stmt;
end $$