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

发布于 2024-10-31 18:37:18 字数 273 浏览 2 评论 0原文

我有一个名为 Items 的巨大表,

P_ID    Item             Rank
1       ItemName1        ValueTBD

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

  • 前 10000 条记录需要值为“10”,
  • 对于每个后续 10000 条记录的值为“等级”需要减 1

因此记录 20000 - 30000 :“等级”值为“9”

I have a huge table called Items

P_ID    Item             Rank
1       ItemName1        ValueTBD

I need to be able to write an update statement to populate the value of the column "rank" as follows:

  • The top 10000 records need a value of "10"
  • For Each subsequent 10000 records the value of "rank" will need to be decremented by 1

Therefore records 20000 - 30000 : would have "rank" values of "9"

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

虐人心 2024-11-07 18:37:18

假设当您说“顶部”和“后续”时,您实际上暗示“按 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 -> 排名 10、10001-20000 -> ;排名 9、20001-30000 -> 排名 8 等),并且将为 100001 以上的范围分配负排名。您的要求不一致:您说“记录 20000-30000 将具有排名 9”。您的意思可能是“20001-30000 条记录的排名为 8”。

Assuming that when you say 'top' and 'subsequent' you actually imply 'order by 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;

This will update with right range boundary (1-10000 -> rank 10, 10001-20000 - >rank 9, 20001-30000 -> rank 8 etc) and will assign negative ranks for ranges above 100001. Your requirements are inconsistent: you say 'records 20000-30000 would have rank 9'. You probably mean 'records 20001-30000 would have rank 8'.

冷…雨湿花 2024-11-07 18:37:18

试试这个:

SELECT P_ID,Rank, 10 - ((ROW_NUMBER() OVER(ORDER BY P_ID DESC))/10000) AS new_RANK

Try this:

SELECT P_ID,Rank, 10 - ((ROW_NUMBER() OVER(ORDER BY P_ID DESC))/10000) AS new_RANK
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文