OriginalGriff
Делайте это поэтапно: сначала получите общий балл студентов и самый высокий личный балл, а затем получите самого высокого бомбардира:
SELECT TOP 1 SNAME, SUM(Marks) As Total, MAX(Marks) As Highest
FROM MyTable
GROUP BY SName
ORDER By Total DESC
Это возвращает одного студента:
SName Total Highest
SURESH 291 98
Затем соедините это с исходной таблицей, чтобы также получить предмет:
SELECT s.SName, s.Total, a.Subject, s.Highest
FROM MyTable a
JOIN (SELECT TOP 1 SNAME, SUM(Marks) As Total, MAX(Marks) As Highest
FROM MyTable
GROUP BY SName
ORDER By Total DESC) s
ON s.SName = a.SName AND s.Highest = a.Marks
Результат: одна строка, информация, которая вам нужна.
SName Total Subject Highest
SURESH 291 English 98
Но...это очень плохой дизайн базы данных. Вы постоянно храните одну и ту же информацию и должны использовать три таблицы: одну для студентов, одну для предметов и одну для результатов, которая использует внешние ключи обратно к другим.
Maciej Los
Как насчет функций ранжирования, таких как РАНГ? Может быть больше одного человека, который достиг 1-го места.