【发布时间】:2019-12-09 15:43:56
【问题描述】:
表 1: 员工编号(例如:100000)|状态((A)活跃/(I)不活跃)
表 2: 组(例如:'ABC')|宽(例如:100000)| has_documents((Y)es/(N)o)
我正在尝试更新一个表,以便将每个处于活动状态的员工设置为 has _document = 'Y' 和每个不活跃的员工 has_documents = 'N'。员工可以在多个组中,并且如果他的状态处于活动状态,则必须在包含其员工 ID 的每一行上都处于“Y”状态
这是我目前的查询:
UPDATE table2 t2 SET has_documents =
(SELECT (CASE WHEN(
SELECT t1.HR_STATUS
FROM table1 t1
WHERE t1.EMPLID = t2.EMPLID ) = 'A' THEN 'Y' ELSE 'N' END) FROM DUAL);
它返回以下错误:单行子查询返回多行
我也尝试过返回相同错误的查询:
UPDATE SYSADM.PS_RH_EE_LITIGATN P
SET RH_RR_DOC = (SELECT
(CASE WHEN
(SELECT J.HR_STATUS FROM PS_JOB_CURR_VW J
JOIN SYSADM.PS_RH_EE_LITIGATN L
ON J.EMPLID = L.EMPLID WHERE J.EMPLID = P.EMPLID)
= 'A' THEN 'Y' ELSE 'N' END) FROM DUAL);
示例数据:
table 1: table2:
empli_id | status group | empli_id | has_docs
100000 | A 'ABC' | 100002 | null
100001 | I 'XYZ' | 100002 | null
100002 | A 'ABC' | 100001 | null
100003 | A 'ABC' | 100003 | null
100004 | I 'XYZ' | 100004 | null
期望的结果:
table 1: table2:
empli_id |status group | empli_id | has_docs
100000 | A 'ABC' | 100002 | Y
100001 | I 'XYZ' | 100002 | Y
100002 | A 'ABC' | 100001 | N
100003 | A 'ABC' | 100003 | Y
100004 | I 'XYZ' | 100004 | N
【问题讨论】:
-
样本数据和期望的结果会有很大帮助。
-
完成我添加了一个例子:)
-
如果单个子查询返回多行,则表明 table1 中的 empid 不是唯一的。你能分享查询 select count(*),empli_id from table1 group by empli_id order by 2 desc 的输出吗