我有一张包含各种排名的表格:
id | rank_group | position
1 |1 | 2
2 |1 | 3
3 |2 | 1
6 |2 | 2
8 |1 | 8
9 |1 | 6
10 |1 | 7
我想知道是否有可能通过一个查询重新计算每个等级组的所有位置,以使其跟随其他人?
这意味着我像桌子一样扭转了:
id | rank_group | position
1 |1 | 1
2 |1 | 2
3 |2 | 1
6 |2 | 2
8 |1 | 5
9 |1 | 3
10 |1 | 4
答案 0 :(得分:2)
也许在CTE和ROW_NUMBER
:
WITH CTE AS
(
SELECT [id], [rank_group], [position],
rowNum = ROW_NUMBER() OVER (PARTITION BY rank_group ORDER BY position ASC)
FROM dbo.Table1
)
UPDATE CTE SET position = rowNum;
答案 1 :(得分:1)
对同一rank_group
内较低位置的项目进行直接更新可以解决问题:
update test
set position = 1 + (
select count(*) from test tt
where t.rank_group=tt.rank_group AND tt.position < t.position
)
from test t