Я не знаю, как выглядит ваше вложенное утверждение, но вы хотите что-то вроде этого:
select
s.firstname,
s.lastname,
sum(case when m.year = m2.minyear then m.mark else 0 end) as `1st Year Marks`,
sum(case when m.year = m2.minyear+1 then m.mark else 0 end) as `2nd Year Marks`,
sum(case when m.year = m2.minyear+2 then m.mark else 0 end) as `3rd Year Marks`
from
students s
inner join marks m on
s.student_id = m.student_id
inner join (select student_id, min(year) as minyear from marks group by student_id) m2 on
s.student_id = m2.student_id
group by
s.firstname,
s.lastname
Я сделал условные суммы здесь, а также динамические годы, так как студенты могли приехатьв разное время.Это было бы проще, если бы у вас был годовой стол с такими словами, как «Первокурсник», «Второкурсник» и т. Д., А затем вы отслеживали, когда Студент закончил этот год, но, думаю, это сработает.