sql—将现有id值分配给同一记录,将新id分配给新记录

r1zhe5dt  于 2021-08-09  发布在  Java
关注(0)|答案(1)|浏览(501)

我在试着看是否每次输入同一条记录时都能给一个名字分配一个id。例如,如果我给john doe分配了一个id e001,我希望每次看到john的记录时都能给john分配相同的值。如果一个新的人出现在图片中,我想从我创建的列表(表id)中选择下一个id并将其分配给那个人,依此类推。我愿意接受关于如何使用sql(最好)或etl方法的建议、想法或更好的方法。谢谢
第1个月的文件(或oracle中的其他表)

Name       Addr      Location
------------------------------
John Doe  123 Main   NA
John Doe  123 Main   NA
Bob Lava  456 Tel    US

第1个月的oracle表

ID    Name       Addr       Location
-------------------------------------
E001   John Doe  123 Main   NA
E001   John Doe  123 Main   NA
E002   Bob Lava  456 Tel    US

第2个月文件(或oracle表)

Name       Addr       Location
-------------------------------
Denny Fry 456 str    AB
John Doe  123 Main   NA
John Doe  123 Main   NA
Bob Lava  456 Tel    US

第2个月的oracle表(只需将第2个月的文件附加到现有数据,但对现有记录使用以前分配的id,对新记录使用新id)

ID    Name       Add       Location
------------------------------------
E001   John Doe  123 Main   NA
E001   John Doe  123 Main   NA
E002   Bob Lava  456 Tel    US
E003   Denny Fry 456 str    AB
E001   John Doe  123 Main   NA
E001   John Doe  123 Main   NA
E002   Bob Lava  456 Tel    US

id表列表(用于为记录分配id)

E001
E002
E003
E004
B001
8xiog9wr

8xiog9wr1#

我可以建议一个sql解决方案 union all 然后你可以用 dense_rank() 如下所示

select
  Name,
  Addr,
  Location,
  'E00' || dense_rank() over (order by Name) as EmpId
from
(
  select
    Name,
    Addr,
    Location
  from monthOne

  union all

  select
    Name,
    Addr,
    Location
  from monthTwo
) val
order by
 EmpId

输出:


* -----------------------------------*

| NAME       ADDR   LOCATION  EMPID |

* -----------------------------------*

|Bob Lava   456 Tel    US     E001  |
|Bob Lava   456 Tel    US     E001  |
|Denny Fry  456 str    AB     E002  |
|John Doe   123 Main   NA     E003  |
|John Doe   123 Main   NA     E003  |
|John Doe   123 Main   NA     E003  |
|John Doe   123 Main   NA     E003  |

* -----------------------------------*

相关问题