我有一个表MAIN
在ID
字段上有重复项,如下所示:
ID SYSTEM FLAG FIRST_NAME LAST_NAME TERMDATE
A021 Alpha Y JOHN DOE null
A021 Beta N JOHN DOE 05-Jun-17
C045 Beta Y PETER PARKER null
C045 Omega N PETER PARKER 05-Jan-17
D078 Alpha N TONY STARK 07-Dec-17
D078 Gamma Y TONY STARK null
X039 Gamma Y STEVE ROGERS null
X039 Gamma Y STEVE ROGERS null
如您所见,我在id字段中有重复项。我想在主表中保留空数据的记录,并将其他记录移到重复的表中。所以我希望主表的输出如下所示:
ID SYSTEM FLAG FIRST_NAME LAST_NAME TERMDATE
A021 Alpha Y JOHN DOE null
C045 Beta Y PETER PARKER null
D078 Gamma Y TONY STARK null
X039 Gamma Y STEVE ROGERS null
副本应该移动到一个副本表中,该表应该如下所示:
ID SYSTEM FLAG FIRST_NAME LAST_NAME TERMDATE
A021 Beta N JOHN DOE 05-Jun-17
C045 Omega N PETER PARKER 05-Jan-17
D078 Alpha N TONY STARK 07-Dec-17
需要注意的是,完全重复的记录没有移动到重复表E.X.X039,将被完全删除,并且不会移动到重复表。
我找不到能达到这个效果的剧本。
最佳答案
还有一个选择:
表格内容:
SQL> select * From main order by id;
ID SYSTEM F FIRST_NAME TERMDATE
----- ---------- - ---------- ----------
a021 alpha y john
a021 beta n john 05.06.2017
c045 beta y peter
c045 omega n peter 05.01.2017
d078 alpha n tony 07.12.2017
d078 gamma y tony
x039 gamma y steve
x039 gamma y steve
8 rows selected.
重复项:在同一个id内按termdate排序。将它们插入重复项并从main中删除。你不能只是“移动”它们(从这里拿出来放在那里;你必须分两步来完成):
SQL> insert into duplicate
2 select id, system, flag, first_name, termdate
3 from (select id, system, flag, first_name, termdate,
4 rank() over (partition by id order by termdate nulls first) rn
5 from main
6 )
7 where rn > 1;
3 rows created.
SQL> delete from main
2 where ( id, system, flag, first_name, termdate) in
3 (select id, system, flag, first_name, termdate
4 from duplicate
5 );
3 rows deleted.
最后,从main中删除剩余的副本:
SQL> delete from main m
2 where exists (select null from main m1
3 where m1.id = m.id
4 and m1.rowid > m.rowid
5 );
1 row deleted.
结果是:
SQL> select * From main order by id;
ID SYSTEM F FIRST_NAME TERMDATE
----- ---------- - ---------- ----------
a021 alpha y john
c045 beta y peter
d078 gamma y tony
x039 gamma y steve
SQL>
SQL> select * from duplicate order by id;
ID SYSTEM F FIRST_NAME TERMDATE
----- ---------- - ---------- ----------
a021 beta n john 05.06.2017
c045 omega n peter 05.01.2017
d078 alpha n tony 07.12.2017
SQL>
关于sql - 将重复的记录移到另一个表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49414866/