这是我成为数据分析师的第一个月,我似乎无法找到足够具体的答案来解决我的问题。我无法让这个经理标志字段工作,我想我对连接感到困惑。
目标是匹配JOB_VW A的EMPLID以查看它们是否存在于Supervisor_VW K的Supervisor_ID列中.Supervisor_VW K在K.EMPLID列中包含公司中的所有员工(包括主管)。有人可以同时在主管ID列和EMPL列中,但是在不同的行中。 SUP ID是经理职位中某人的EMPL ID。
例如: Supervisor_VW K
EMPL ID EMPL NAME SUP ID SUP NAME
1 Smith, John 2 William, Mark
5 Jarvis, John 2 William, Mark
2 William, Mark 4 Rover, Spot
我得到的结果就是这样 查询结果
EMPLID EMPL NAME MANAGER FLAG
2 William, Mark Y
2 William, Mark Y
4 Rover, Spot Y
1 Smith, John N
5 Jarvis, John N
我目前的代码如下:
SELECT CASE WHEN K.Supervisor_Id IS NULL THEN
'N'
ELSE
'Y'
END AS "ManagerFlag".....
FROM (SELECT K.*
FROM SUPERVISOR_VW K, JOB_VW A
WHERE K.SUPERVISOR_ID (+) = A.EMPLID
AND EXISTS (SELECT K1.EMPLID, K1.SUPERVISOR_ID
FROM SUPERVISOR_VW K1
WHERE K1.EMPLID IN K1.Supervisor_Id)
) K
所以我似乎正在为他们监督的每一位员工获取重复的主管行。如果他们只监督一个人,我会得到一个单一的行。如果他们监督20,我得到20个重复的那个主管。但是,他们监督的员工在没有问题的情况下显示在表中,并且被正确标记为N,没有重复。
如果有人可以提供帮助,请做!感谢您阅读我的工作,如果需要更多信息,请告诉我。
答案 0 :(得分:0)
达到预期结果的通常方法是:
select emplid, emplname,
case when emplid in (select supid from supervisor_vw) then 'Y'
else 'N' end as managerflag
from supervisor_vw;