如何使用多组行的数字更新列?
Posted
技术标签:
【中文标题】如何使用多组行的数字更新列?【英文标题】:How to update column with numbers for multiple sets of rows? 【发布时间】:2014-06-25 07:15:31 【问题描述】:我有一个超过 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;
【讨论】:
以上是关于如何使用多组行的数字更新列?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用分析窗口 SQL 函数在同一数据集的多组行中查找 id 值