我想将一个属性的值(称为position
)排序到另一个属性顺序的行号。
示例:如果我具有以下属性:位置,点
我想按点对表进行排序(降序),然后为position
分配有序的行号,例如。
Position --- Points
1 ------------ 99
2 ------------ 97
3 ------------ 81
etc..
答案 0 :(得分:0)
您可以使用窗口函数row_number()
由于OP要更新记录
with data
as (
select row_number() over(order by points desc) as rnk_position
,position
,points
from leagueParticipantView /* Is this a view or a table*/
where leagueName LIKE &leagueName
)
update data
set position = rnk_position
答案 1 :(得分:0)
您只是想要row_number()
还是rank()
?
select row_number() over (order by points desc) as position, points
from t
order by position;
答案 2 :(得分:0)
要获得所需的排名或位置,只需使用RANK()函数,如下所示:
create table #MyTable (Position int, Points int)
insert into #MyTable values (0, 99),(0, 97),(0, 89)
SELECT #MyTable.Points, RANK () OVER( ORDER BY Points desc) AS Position
FROM #MyTable
输出将如下所示
Points Position
99 1
97 2
89 3
您可以将其用于内部联接的更新中,该联接具有原始表和具有rank函数的表,如下所示。
UPDATE A
SET A.Position = B.Position
from #MyTable A
INNER JOIN (SELECT #MyTable.Points, RANK () OVER( ORDER BY Points desc) AS Position
FROM #MyTable) B ON A.Points = B.Points
更新后,您可以使用select语句获取如下所示的更新位置
SELECT * FROM #MyTable
Position Points
1 99
2 97
3 89
drop table #MyTable.
希望这会对您有所帮助。