sql - 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
解决方案
一种选择是使用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>
推荐阅读
- python - 从创建和修改的时间戳生成积压数据
- intellij-idea - 如何运行在 intellij 中具有依赖关系的单个 TestNG 测试
- swift - 无法插入 COPY_SEND
- c# - 当我过滤“包含”实体时,不要加载相关数据
- javascript - 解析时 Http 失败
- go - Heroku、golang 资产编译应该在构建期间进行。但是怎么做?
- windows - 如何在使用带有文件监视的堆栈构建之前清除控制台
- postgresql - Postgres 不使用索引,即使它被创建
- nodatime - 为什么 NodaTime 中没有 ZonedDate?
- c# - 是否可以使用 InputSimulator API 将击键发送到后台窗口?