Вот очень, очень уродливый способ.Я думаю, что я бы лучше понизил плату за обновление, чем написал бы слишком много из них.Надеюсь, кто-то еще придумает что-нибудь почище.
CREATE TABLE #x(CourseID INT, StudentName VARCHAR(32), TermPaperID INT);
INSERT #x SELECT 101,'Jon ',1;
INSERT #x SELECT 101,'Jon ',2;
INSERT #x SELECT 101,'Jon ',3;
INSERT #x SELECT 101,'David ',1;
INSERT #x SELECT 101,'David ',2;
INSERT #x SELECT 102,'David ',5;
INSERT #x SELECT 102,'David ',6;
INSERT #x SELECT 102,'George',5;
SELECT b.CourseID, b.StudentName, max_registration = COUNT(*)
FROM #x AS b
INNER JOIN (
SELECT CourseID, c = MAX(c)
FROM
(
SELECT CourseID, StudentName, c = COUNT(CourseID)
FROM #x GROUP BY CourseID, StudentName
) AS x GROUP BY CourseID
) AS s
ON b.CourseID = s.CourseID
GROUP BY b.CourseID, b.StudentName
HAVING COUNT(*) = MAX(s.c)
ORDER BY b.CourseID;