我有一个超过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循环来做这个或任何更好的查询。我希望我的问题很明确。
答案 0 :(得分:1)
试试这个:
update table
set flag = trunc((id - 1) / 1000) + 1;