SQL Server 2008: инструкция по обновлению: как уменьшить столбец для каждых 10000 записей, найденных в запросе - PullRequest
2 голосов
/ 11 апреля 2011

У меня есть огромный стол под названием Items

P_ID    Item             Rank
1       ItemName1        ValueTBD

Мне нужно иметь возможность написать оператор обновления, чтобы заполнить значение столбца "rank" следующим образом:

  • Лучшие 10000 записей должны иметь значение "10"
  • Для каждой последующей 10000 записей значение «ранга» необходимо будет уменьшить на 1

Поэтому записи 20000 - 30000: будут иметь значения "rank", равные "9"

Ответы [ 2 ]

2 голосов
/ 11 апреля 2011

Предполагая, что когда вы говорите 'top' и 'последующий', вы фактически подразумеваете 'заказ на 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».

1 голос
/ 11 апреля 2011

Попробуйте это:

SELECT P_ID,Rank, 10 - ((ROW_NUMBER() OVER(ORDER BY P_ID DESC))/10000) AS new_RANK
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...