plsql - 更新数据集中缺失的增量数字
问题描述
在我的一个表中,我有一个名为“优先级”的列,它是一个从 1 开始的数字。有了新数据,下一个数字将被添加到新记录中。当我从中间删除数据时,优先级会有差距。我想运行一个 plsql update 语句,以便根据我之前的优先级顺序替换丢失的数字。
原始数据
Priority | user
1 | A
2 | B
3 | C
4 | D
然后我删除记录B
Priority | user
1 | A
3 | C
4 | D
更新后应该是这样的
Priority | user
1 | A
2 | C
3 | D
解决方案
你可以在没有 PL/SQL 的情况下做到这一点:
create table demo
( priority number, username varchar2(20) );
insert all
into demo values (2, 'A')
into demo values (4, 'B')
into demo values (9, 'C')
into demo values (10, 'D')
select * from dual;
merge into demo o
using ( select row_number() over (order by priority) as new_priority
, rowid as row_id
from demo ) n
on (n.row_id = o.rowid)
when matched then update set o.priority = n.new_priority;
select * from demo;
PRIORITY USERNAME
---------- --------------------
1 A
2 B
3 C
4 D
推荐阅读
- docker - 如何在 Pycharm Docker Interpreter 中设置 docker 容器名称
- c++ - 混合虚拟和模板
- r - 同时创建多个子集
- azure - Azure Key Vault 扩展在更新后未自动绑定
- .net - 如何加入 TransactionScope?
- r - 仅当 dummy = 0 时删除某些列中带有 na 的行
- c - 无数组的最小数的序数
- reactjs - 我在从不同的下拉列表中呈现不同的数据时遇到问题,但在 React.js 中呈现相同的页面。我需要单独更改每个下拉菜单
- angular11 - 如何支持 Angular 网站的多语言
- amazon-web-services - AWS Sagemaker Pytorch 无法正常运行