我有一个名为Items
的大表P_ID Item Rank
1 ItemName1 ValueTBD
我需要能够编写一个更新语句来填充列“rank”的值,如下所示:
因此记录20000-30000:将具有“等级”值“9”
答案 0 :(得分:2)
假设当你说“顶部”和“后续”时,你实际上暗示'按P_ID
'排序:
with cte as (
select Rank, row_number() over (order by P_ID) as row_rank
from Items)
update cte
set Rank = 10 - (row_rank-1)/10000;
这将更新右边界(1-10000 - > rank 10,10001-20000 - > rank 9,20001-30000 - > rank 8等),并为100001以上的范围分配负排名。要求不一致:你说'记录20000-30000将排名9'。你可能意味着'记录20001-30000将排名8'。
答案 1 :(得分:1)
试试这个:
SELECT P_ID,Rank, 10 - ((ROW_NUMBER() OVER(ORDER BY P_ID DESC))/10000) AS new_RANK