SOURCE_TABLE
------------
OID EVENT_ID
1 1111
2 2222
3 1111
4 1111
5 1111
6 2222
7 2222
8 2222
FINAL_TABLE
------------
SNO EVENT_ID OID LINE_NUMBER
1 1111 1 1
2 1111 1 2
3 1111 3 3
4 1111 3 4
5 1111 4 5
6 1111 4 6
7 1111 5 7
8 1111 5 8
9 2222 2 1
10 2222 2 2
11 2222 6 3
12 2222 6 4
13 2222 7 5
14 2222 7 6
15 2222 8 7
16 2222 8 8
我正在使用Oracle 11g。我想将数据从SOURCE表插入到FINAL表中。在FINAL表中,每个EVENT_ID的行号都必须是唯一的(例如,1111)。
答案 0 :(得分:3)
假设SNO是Final_Table中的自动增量PK。使用ROW_NUMBER() function:
insert into FINAL_TABLE (EVENT_ID, OID, LINE_NUMBER)
(
select EVENT_ID,OID,
ROW_NUMBER() OVER(PARTITION BY EVENT_ID ORDER BY OID) as LINE_NUMBER
from source_table
);
答案 1 :(得分:0)
如果我理解正确,你就是在这之后
SELECT EVENT_ID, OID ROW_NUMBER()
OVER (PARTITION BY EVENT_ID,OID ORDER BY OID) AS LINE_NUMBER
FROM SOURCE_TABLE;