Вы знаете, как получить итоги по паре категорий. Из них вы хотите показать только верхние строки для категории 2.
Чтобы это произошло, вы можете ранжировать строки с RANK OVER
, таким образом, присвоив верхним строкам ранг 1. Чтобы получить только верхние строки, вы бы использовали TOP
. Здесь вам нужно предложение WITH TIES
, потому что есть несколько строк с одинаковым рангом 1.
select top(1) with ties category2, category1, sum(sales) as total
from mytable
group by category2, category1
order by rank() over (partition by category2 order by total desc);