Если у вас уже нет всех данных в памяти, более эффективно позволить базе данных выбрать правильные данные для вас.
Если вы храните оценки в виде полей в базе данных, вы должны нормализовать их, чтобы сделать возможным запрос. Лучше всего перепроектировать базу данных и поместить оценки в виде строк в отдельной таблице. Данные должны быть в полях таблиц, а не в именах полей:
select top 3 GradeName, Grade
from Grades
where StudentId = 42
order by Grade desc
Вы также можете нормализовать данные на лету, но это, конечно, не так эффективно:
select top 3 GradeName, Grade
from (
select GradeName = 'Engrish', Grade = Engrish from Students where StudentId = 42
union all
select 'Drama', Drama from Students where StudentId = 42
union all
select 'Math', Math from Students where StudentId = 42
union all
select 'Chemistry', Chemistry from Students where StudentId = 42
) Grades
order by Grade desc