组合多种策略以生成唯一列?

问题描述

我有一个包含 last_name 和 first_name 列的员工表。我想生成一个名为 employee_code 的列,该列将始终包含 3 个字符并且是唯一的。如果它不存在,代码将是 first_name 的第一个字母,后跟姓氏的两个第一个字母。

SELECT 'LUDOVIC' AS first_name,'AUBERT' AS last_name,'LAU' AS employee_code;

但是如果'LAU'已经存在,我想使用另一种策略,例如使用名字的两个第一个字母,然后是姓氏的第一个字母。

SELECT 'LUDOVIC' AS first_name,'LUA' AS employee_code;

如何在 sql 中实现这一点?

解决方法

DROP TABLE IF EXISTS employe;
CREATE TABLE employe (
id int primary key,first_name varchar(30),last_name varchar(30),code1 char(3),nb1 int NULL,code2 char(3),code char(3) NULL
);
insert into employe (id,first_name,last_name,code1,code2)
VALUES (1,'LUDOVIC','AUBERT','LAU','LUA'),(2,'LUDOVICO','LUA');

SELECT * FROM employe;
WITH cte AS (
    SELECT id,rank() OVER (PARTITION BY code1 ORDER BY id ASC) as n1,code2
    FROM employe
)  
SELECT *,CASE WHEN n1=1 THEN code1 ELSE code2 END AS code FROM cte;

enter image description here