如何使用多组行的数字更新列?

时间:2014-06-25 07:15:32

标签: 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 个答案:

答案 0 :(得分:1)

试试这个:

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