Ваши измененные спецификации под моим предыдущим ответом показывают, что вы не знали точно, какой результат вы получилиЭто часто является причиной неправильных запросов, и поэтому мы всегда запрашиваем пример результата в запросе.Это помогло бы нам и, возможно, в первую очередь помогло бы вам.
Вы сказали, что хотите сохранить исходные строки и хотите найти максимально используемый компьютер на пользователя, и если быдва таких компьютера с одной и той же ОС, мы должны были бы выбрать один произвольно.Теперь кажется, что вы не хотите сохранять исходные строки, а просто показывает одну строку для каждого пользователя и компьютера и помечаете один компьютер для каждой пользовательской ОС как основной.Это намного, намного проще.
Группировка по пользователю, компьютеру (и его ОС), чтобы получить счет.Пронумеруйте эти результаты для каждого пользователя и ОС, упорядоченных логинами, чтобы получить один основной компьютер для пары.
select
asset_user, computername, os, sum(logoncount) as total_logins,
case when row_number() over (partition by asset_user, os
order by sum(logoncount) desc, computername) = 1
then 'primary'
else 'secondary'
end as priority
from mytable
where login_user = asset_user
group by asset_user, computername, os
order by asset_user, priority, os, computername;
Результат:
+------------+--------------+-----+--------------+-----------+
| asset_user | computername | os | total_logins | priority |
+------------+--------------+-----+--------------+-----------+
| user1 | computer1 | W7 | 31 | primary |
| user2 | computer2 | W7 | 32 | primary |
| user6 | computer5 | W10 | 11 | primary |
| user6 | computer6 | W7 | 22 | primary |
| user6 | computer4 | W10 | 3 | secondary |
+------------+--------------+-----+--------------+-----------+
Демонстрация: https://dbfiddle.uk/?rdbms=sqlserver_2017&fiddle=8ab619f88b8e1adfff81e3d18e0446fe