首页 > 解决方案 > Oracle存储过程插入带有前缀员工编号的唯一ID

问题描述

我有一张家庭申报表。虽然员工会申报他们的家庭成员详细信息,但我想给每个家庭成员一个唯一的 ID。如果员工 id 是 76331 并且有 3 个家庭成员,那么唯一 id 将是 76331_1,76331_2,76331_3 并且所有员工的序列号都是这样的。

预期的输出应该是这样的,

EmployeeCode             Unique id                 Family member name
---------------------------------------------------------------------
76331                    76331_1                           X    
76331                    76331_2                           Y    
76331                    76331_3                           Z    
71873                    71873_1                           A    
71873                    71873_2                           B

标签: sqloracle

解决方案


一种选择是使用ROW_NUMBER分析函数:

SQL> with fam (code, name) as
  2    (select 76331, 'X' from dual union all
  3     select 76331, 'Y' from dual union all
  4     select 76331, 'Z' from dual union all
  5     --
  6     select 71873, 'A' from dual union all
  7     select 71873, 'B' from dual
  8    )
  9  select
 10    code,
 11    code ||'_'|| row_number() over (partition by code order by name) unique_id,
 12    name
 13  from fam
 14  order by code, name;

      CODE UNIQUE_ID  NAME
---------- ---------- ----
     71873 71873_1    A
     71873 71873_2    B
     76331 76331_1    X
     76331 76331_2    Y
     76331 76331_3    Z

SQL>

推荐阅读