oracle 能否用SQL语句实现自表的分组更新

我有一张表 列是: 工厂 工程 机器 序列
数据: 1 A1 001

数据: 1 A1 002

数据: 1 A1 003

数据: 1 A2 001

数据: 1 A2 002

数据: 1 A2 002

数据: 2 B1 001

数据: 2 B1 002

数据: 2 B1 002

我想写一个update 能够更新序列这个字段
规则是 按 工厂,工程分组 机器升序 从1开始
最终要的数据如下
工厂 工程 机器 序列
1 A1 001 1
1 A1 002 2
1 A1 003 3
1 A2 001 1
1 A2 002 2
1 A2 002 3
2 B1 001 1
2 B1 002 2
2 B1 002 3

有办法实现吗

是的,可以使用SQL语句实现自表的分组更新。以下是一个Oracle的SQL示例,可以实现您所要求的结果:

UPDATE your_table t
SET t.序列 = (
    SELECT COUNT(*) 
    FROM your_table t2 
    WHERE t2.工厂 = t.工厂 
      AND t2.工程 = t.工程 
      AND t2.机器 <= t.机器
)

该SQL语句将基于 "工厂"和 "工程" 进行分组,按照 "机器" 升序排列,并为每个分组中的行分配一个序列值。请将 "your_table" 替换为您的实际表名字。