假设你正打算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重复,因为以前的解决方案:-ing
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