Я думаю, что вы можете использовать номер строки на основе разделения по поставщикам, а затем использовать статистическую функцию вместе с номером строки для ранжирования. Затем выберите только тот, у которого есть больше строк для данного поставщика. Я просто взял некоторую часть ваших образцов данных и сделал это таким образом.
with cte as (
select 1 as ProductID, 'Chai' as ProductNmae, 1 as SupplierID, 1 as CategoryID union all
select 2 as ProductID, 'Chang' as ProductNmae, 1 as SupplierID, 1 as CategoryID union all
select 3 as ProductID, 'Aniseed Syrup' as ProductNmae, 1 as SupplierID, 2 as CategoryID union all
select 4 as ProductID, 'Chef Anton''s Cajun Seasoning' as ProductNmae, 2 as SupplierID, 2 as CategoryID union all
select 5 as ProductID, 'Chef Anton''s Gumbo Mix' as ProductNmae, 2 as SupplierID, 2 as CategoryID union all
select 6 as ProductID, 'Grandma''s Boysenberry Spread' as Product_name , 3 as SupplierID, 2 as CategoryID union all
select 7 as ProductID, 'Uncle Bob''s Organic Dried Pears' as Product_name , 3 as SupplierID, 7 as CategoryID union all
select 8 as ProductID, 'Northwoods Cranberry Sauce' as Product_name , 3 as SupplierID, 2 as CategoryID )
select t.SupplierID, t.CategoryID, t.total from (
select supplierID, CategoryID , ROW_NUMBER() over (partition by supplierID order by count(1) desc) rownum, count(1) total from cte
group by supplierID, CategoryID ) t
where t.rownum = 1
Вывод:
SupplierID CategoryID total
1 1 2
2 2 2
3 2 2