繁体   English   中英

如何将序列号更新为包含数据的现有表

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM