需要根据两个不同列中值的组合更新 SQL 表列中的数据

问题描述 投票:0回答:2

我有一张表,其中有两列有问题: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
mysql sql sql-update where-clause
2个回答
0
投票

您可以使用下面的 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')
              );

0
投票

我最终使用了以下代码:

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

© www.soinside.com 2019 - 2024. All rights reserved.