Это заставляет меня чувствовать себя грязным. Он вернет одно имя команды, даже если есть связь - если вы хотите, чтобы в случае связи были все строки, используйте DENSE_RANK()
вместо ROW_NUMBER()
.
SELECT t.ID, t.Name FROM
(
SELECT
TeamID, rn = ROW_NUMBER() OVER (ORDER BY c DESC)
FROM
(
SELECT TeamID, c = COUNT(*)
FROM dbo.TeamMember GROUP BY TeamID
) AS x
) AS y
INNER JOIN dbo.Team AS t
ON y.TeamID = t.ID
WHERE y.rn = 1; -- **EDIT** forgot the most important part!
Я бы действительно встал и бросил вызов правилу "нет ТОП 1". Попросите человека, который сказал вам, что по соображениям производительности сравнить производительность вашего существующего запроса с любым из предложенных нами кладжей.