SQL Server 2008:更新语句:如何为查询中找到的每10000条记录递减一列

时间:2011-04-11 17:56:26

标签: sql sql-server-2008 ssis

我有一个名为Items

的大表
P_ID    Item             Rank
1       ItemName1        ValueTBD

我需要能够编写一个更新语句来填充列“rank”的值,如下所示:

  • 前10000个记录需要值“10”
  • 对于每个后续10000条记录,“rank”的值将需要递减1

因此记录20000-30000:将具有“等级”值“9”

2 个答案:

答案 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