В СУБД, которая поддерживает управление окнами (включая SQL Server 2008, я полагаю)
SELECT CON, OWNER, METHOD, MATRIX, RESULT, `COUNT`
FROM
(SELECT CON, OWNER, METHOD, MATRIX, RESULT, `COUNT`,
RANK() OVER (PARTITION BY CON, OWNER, METHOD, MATRIX
ORDER BY RESULT DESC, `COUNT` DESC) AS rk
FROM temptable
) AS s
WHERE rk=1;
Обратите внимание, что ваш текст подразумевает только один ненулевой результат на группу, а ваш пример - нет.Эта версия выберет максимальный результат, если все результаты не будут одинаковыми (например, NULL), когда count
будет тай-брейком.Кстати, COUNT
как имя столбца будет вызывать всевозможные печали.Эта версия также выбирает несколько строк в случае связей как в результате, так и в счетчике.Переключите ранг на row_number, чтобы получить только один, независимо от того, есть ли связь.