我有一张表,其中有两列有问题:Emp_ID 和 Status
当前表:
Emp_ID | 状态 |
---|---|
12 | 常驻 |
13 | 休闲 |
14 | 温度 |
14 | 休闲 |
15 | 常驻 |
15 | 休闲 |
16 | 休闲 |
16 | 休闲 |
17 | 休闲 |
17 | 常驻 |
18 | 因果关系 |
18 | 休闲 |
需要根据员工的 Id 和状态在同一个表中创建另一列。
状态可以是:永久、临时、临时
给定的员工可以同时拥有所有三种身份。
我想做的是创建另一个名为 Permanent_Status 的列,如果员工具有 Permanent 或 temp 状态,则将其标记为 Y,而如果他具有临时状态,则将其设置为 N.
另一个需要注意的是,如果员工同时具有永久和临时身份或临时和临时身份,则需要将标志设置为 Y。
只有当员工只有临时身份时,标志才需要是 N.
我为此使用 MySQl。
我尝试使用更新表语句但无法弄清楚确切的逻辑
期望的输出:
Emp_ID | 状态 | 永久状态 |
---|---|---|
12 | 常驻 | Y |
13 | 休闲 | N |
14 | 温度 | Y |
14 | 休闲 | Y |
15 | 常驻 | Y |
15 | 休闲 | Y |
16 | 休闲 | N |
17 | 休闲 | Y |
17 | 常驻 | Y |
18 | 休闲 | N |
18 | 休闲 | N |
您可以使用下面的 exists 子句来达到您想要的结果 -
UPDATE your_table T1
SET Permanent_Status = 'Y'
WHERE EXISTS (SELECT NULL
FROM your_table T2
WHERE T1.Emp_ID = T2.Emp_ID
AND Status IN ('Permanent', 'Temp')
);
我最终使用了以下代码:
IF OBJECT_ID(N'tempdb..#EMPLOYEE_DEMOGRAPHICS') 不为空 开始 删除表 #EMPLOYEE_DEMOGRAPHICS 结束;
从 EMPLOYEE_DEMOGRAPHICS 中选择 Empl_Class、ID、'2' 作为 Permanent_Status1 进入#EMPLOYEE_DEMOGRAPHICS;
creating temp table putting data for Empl_Class, ID and setting Permanent_Status1 as 2 for all records
update #EMPLOYEE_DEMOGRAPHICS
set Permanent_Status1 = 1 where Empl_Class in ('TMP', 'PER');
setting Permanent_Status1 = 1 where Empl_Class in ('TMP', 'PER') in 临时表
更新#EMPLOYEE_DEMOGRAPHICS 设置 Permanent_Status1 = ( 当 Empl_Class = 'CAS' 然后 'N' 当 Empl_Class 在 ('PER', 'TMP') 然后 'Y'end);
设置 Permanent_Status1 = N when Empl_Class = 'CAS', Empl_Class in ('PER', 'TMP') 然后是 'Y'
CTE_rank 为( 从 ( 选择 *, rn= ROW_NUMBER () 在 ( 按 ID 分区 按 Permanent_Status1 排序 ) 来自#EMPLOYEE_DEMOGRAPHICS ) 作为子 其中 sub.rn =1) 更新 CTE_rank 设置 Permanent_Status1 = ( 当 Empl_Class = 'CAS' 然后 'N' 当 Empl_Class in ('PER', 'TMP') 然后 'Y' 结束);
创建 CTE 以确保我们实施逻辑,如果员工 在 ('PER', 'TMP') 中有 Empl_Class 然后 permanent_status 设置为 Y 而如果他的记录/记录只是 CAS 那么 Empl_Class = 'CAS'
更新 EMPLOYEE_DEMOGRAPHICS SET permanent_status = #EMPLOYEE_DEMOGRAPHICS.permanent_status1 来自 EMPLOYEE_DEMOGRAPHICS 在 EMPLOYEE_DEMOGRAPHICS.ID 上加入#EMPLOYEE_DEMOGRAPHICS = #EMPLOYEE_DEMOGRAPHICS.ID ;
更新 permanent_status 列的数据 通过查找 ID 列从临时表中获取 EMPLOYEE_DEMOGRAPHICS