【发布时间】:2018-09-19 16:14:04
【问题描述】:
我有两个表 test2 和 test_hist。我想将数据从 test2 加载到 test_hist 但由于唯一约束而失败。
CREATE TABLE TEST2 (ID NUMBER , TEXT VARCHAR2(10));
create table test_hist (id number , text varchar2(10) , constraint t_pk PRIMARY key (id , text));
INSERT INTO TEST2 VALUES(100 , '20180909-I');
INSERT INTO TEST2 VALUES(101 , '20180909-I');
INSERT INTO TEST2 VALUES(102 , '20180809-I');
INSERT INTO TEST2 VALUES(100 , '20180909-I');
COMMIT;
INSERT INTO test_hist SELECT ID , TEXT FROM TEST2;
每当有如下重复项时,我想在 TEXT 字段中附加自动递增编号。
expected OUTPUT
ID TEXT
100 20180909-I
101 20180909-I
102 20180809-I
100 20180909-I-1
100 20180909-I-2
102 20180809-I-1
任何人都可以帮助我实现这一目标。 提前致谢
如果我多次执行插入语句,它应该使用自动增量文本插入到 test_hist 中。 例如
insert into test_hist
select id,
text || case when row_number() over (partition by id, text order by null) > 1
then (1 - row_number() over (partition by id, text order by null)) end
from test2;
9 rows inserted.
select *
from test_hist
order by id, text;
ID TEXT
---------- ------------
100 20180909-I
100 20180909-I-1
100 20180909-I-2
100 20180909-I-3
101 20180909-I
101 20180909-I-1
102 20180809-I
102 20180809-I-1
102 20180809-I-2
【问题讨论】:
标签: sql oracle sql-insert analytic-functions