[英]How to update sequence number to a existing table that contains data
CREATE TABLE e_demo_tab (
e_id NUMBER(10),
e_uuid NUMBER(10),
seq_cnt NUMBER(10)
);
INSERT INTO e_demo_tab VALUES(11,13,null);
INSERT INTO e_demo_tab VALUES(11,13,null);
INSERT INTO e_demo_tab VALUES(11,14,null);
INSERT INTO e_demo_tab VALUES(11,14,null);
INSERT INTO e_demo_tab VALUES(12,15,null);
INSERT INTO e_demo_tab VALUES(12,15,null);
我有一个表e_demo_tab
,其中我必须根据e_uuid
seq_cnt
。 如果对于 11 的相同e_id
示例,我们将e_uuid
列作为 13 出现两次,因此seq_cnt
应分别更新为 1 和 2,同样对于相同的e_id
即 11 为e_uuid
14 它应该将计数更新为 1 和2分别。 我想知道这是否可以使用row_num
来处理。 请建议。
预期 Output:
+------+--------+---------+--+
| E_ID | E_UUID | SEQ_CNT | |
+------+--------+---------+--+
| 11 | 13 | 1 | |
| 11 | 13 | 2 | |
| 11 | 14 | 1 | |
| 11 | 14 | 2 | |
| 12 | 15 | 1 | |
| 12 | 15 | 2 | |
+------+--------+---------+--+
一种选择是使用ROW_NUMBER
分析 function(“创建”序列号),然后在ROWID
上进行MERGE
(因为没有任何列可以唯一地表示单行)。
SQL> merge into e_demo_tab a
2 using (select
3 rowid rid,
4 row_number() over (partition by e_id, e_uuid order by rowid) rn
5 from e_demo_tab
6 ) x
7 on (a.rowid = x.rid)
8 when matched then update set a.seq_cnt = x.rn;
6 rows merged.
SQL> select * from e_demo_tab order by e_id, e_uuid, seq_cnt;
E_ID E_UUID SEQ_CNT
---------- ---------- ----------
11 13 1
11 13 2
11 14 1
11 14 2
12 15 1
12 15 2
6 rows selected.
SQL>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.