Предполагая, что вы хотите, чтобы столбец col3 находился в не убывающем порядке, он должен это сделать:
UPDATE MyTable
SET col2=(SELECT COUNT(*)
FROM MyTable AS T2
WHERE T2.col1=T1.col1 AND T2.col3<=T1.col3)
FROM MyTable AS T1
Вы получите дубликаты в столбце col2, если в столбце col3 есть дубликаты для определенного значения col1.
В случае, если вам интересно, вот довольно подробное (и более дорогое исполнение) решение с использованием функции ранжирования. Он имеет ту же проблему (т. Е. Счет повторяется) для дубликатов в столбце col1 / col3, как и в предыдущем решении:
UPDATE MyTable
SET col2=(
-- In the following query, DISTINCT merges rank dups caused by col3 dups
-- SELECT TOP(1) MyRank would also work.
SELECT DISTINCT MyRank
FROM (
SELECT col3,
DENSE_RANK() OVER (PARTITION BY col1 ORDER BY col3) AS MyRank
FROM MyTable
WHERE col1=UpdatedTable.col1
) As RankTable
WHERE RankTable.col3=UpdatedTable.col3)
FROM MyTable AS UpdatedTable