SQL新手坚持经理Flag Field Logic

时间:2016-05-11 15:13:02

标签: sql oracle

这是我成为数据分析师的第一个月,我似乎无法找到足够具体的答案来解决我的问题。我无法让这个经理标志字段工作,我想我对连接感到困惑。

目标是匹配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,没有重复。

如果有人可以提供帮助,请做!感谢您阅读我的工作,如果需要更多信息,请告诉我。

1 个答案:

答案 0 :(得分:0)

达到预期结果的通常方法是:

select emplid, emplname, 
   case when emplid in (select supid from supervisor_vw) then 'Y' 
                                                         else 'N' end as managerflag
from supervisor_vw;