Предполагая, что на одного учащегося всегда есть три предмета, вот идея.
Для каждого studentname
:
Count каждый studentsubjectstatus
.
Сортируйте результаты в порядке убывания количества, а затем в алфавитном порядке studentsubjectstatus
(так что Fail
станет первым в случае связей).
Получить максимальный результат.
Так, что-то вроде этого:
SELECT DISTINCT
studentname,
studentperformance = (
SELECT TOP (1)
s.studentsubjectstatus
FROM
dbo.yourtable AS s
WHERE
s.studentname = t.studentname
GROUP BY
s.studentsubjectstatus
ORDER BY
COUNT(*) DESC,
s.studentsubjectstatus ASC
)
FROM
dbo.yourtable AS t
;
Если вы не хотите, чтобы полагаться на алфавитном порядке значений в studentsubjectstatus
, вы можете убедиться, что Fail
приходит первым, заменив s.studentsubjectstatus ASC
с чем-то например:
CASE s.studentsubjectstatus WHEN 'Fail' THEN 1 ELSE 2 END ASC