Как обновить столбец с номерами для нескольких наборов строк?

#oracle #oracle11g

#Oracle #oracle11g

Вопрос:

У меня есть таблица, в которой более 500 000 строк. Вот что мне нужно — для каждых 1000 строк мне нужно обновить значение столбца до последовательных чисел, начиная с 1. Например, таблица ниже:

 ID      | NAME  | EMAIL         | PHONE      | FLAG
1       | Peter | pete@mail.com | 12345678   |
.
.
.
.
500000  | Josef  | jos@mail.com | 987654321  |
  

Итак, для первых 1000 строк мне нужно, чтобы значение столбца FLAG было равно 1, следующие 1000 строк — 2 и т. Д., А последняя группа из 1000 или менее 1000 строк — следующему порядковому номеру

Конечный результат, который мне нужен, выглядит следующим образом:

 ID      | NAME  | EMAIL         | PHONE      | FLAG
1       | Peter | pete@mail.com | 12345678   |  1
.
.
1000    | Sashi | sash@mail.com | 2353553    |  1
1001    | Veer  | veer@mail.com | 33453453   |  2 
.
.
2000    | Ash   | ash@mail.com  | 235427127  |  2
.
.
499001  | Duster| dust@mail.com | 3434343    | 500
500000  | Josef  | jos@mail.com | 987654321  | 500
.
.
  

Я могу написать этот запрос

 update table
set flag = 1
where rownum <= 1000 and flag is null;
  

Приведенный выше запрос занимает много времени вручную. В любом случае я могу использовать какой-то цикл for для выполнения этого или любого лучшего запроса. Надеюсь, мой вопрос понятен.

Ответ №1:

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

 update table
   set flag = trunc((id - 1) / 1000)   1;