Если вы действительно хотите результаты, которые вы указали в своем вопросе, я предлагаю следующее:
declare @Orig table (ID int, val int)
insert into @Orig values (1, 1),
(2, 1),
(3, 2),
(4, 3)
--select * from @Orig --show example table
declare @Stat table (val int, cnt int)
insert into @Stat
select val as ID, count(val) as count from @Orig group by val order by val asc
--select * from @Stat --L. Ribo's query results from group/order query
select o.ID, s.cnt from @Orig o
inner join @Stat s on o.val = s.val
Результаты:
ID cnt
1 2
2 2
3 1
4 1
Соедините таблицу статистики с исходной таблицей.Конечно, возможно, есть какой-то элегантный способ сделать это без временных таблиц, но мне проще разобраться и понять, пошагово делая это.Это было сделано в SQL Server.Временные таблицы в других разновидностях SQL (например, MySQL) имеют другой синтаксис.