我检查了SO问题/动态查询响应,讨论了CASE..WHEN..END。但是,请注意,这是Oracle的新手,无法为我的用例找到合适的解决方案。谢谢。
我有以下示例数据,根据条件,我需要获取给定部门的EMPID:
DEPTNO EMP_ID IS_PRIMARY SDATE EDATE IS_ACTIVE
11250 12321 Y 01-Jan-17 29-Apr-18 N
11250 12343 N 01-Jan-17 29-Apr-18 N
11250 87653 N 16-Jul-18 31-Dec-00 Y
如果IS_PRIMARY ='Y'和IS_ACTIVE ='Y',则主要验证返回部门的EMPLOYEE ID(11250)。如果IS_PRIMARY为'N',则返回员工ID,其中IS_ACTIVE ='Y',(这意味着基于查询,我应该获得员工ID 87653)。
我尝试了以下查询,但是正在获取所有记录,有人可以帮我吗。
select EMP_ID from employee a where (a.deptno='81B11' and a.is_primary = 'Y') or (a.deptno='81B11' and a.is_active='Y' and a.is_primary_territory='N');
谢谢
答案 0 :(得分:0)
您可以使用EXISTS
来检查部门的主要员工和在职员工。如果仅选择它们。如果它们不存在,则选择活动的。
SELECT e1.emp_id
FROM employee e1
WHERE e1.deptno = '81B11'
AND (EXISTS (SELECT *
FROM employee e2
WHERE e2.deptno = e1.deptno
AND e2.is_primary = 'Y'
e2.is_active = 'Y')
AND e1.is_primary = 'Y'
AND e1.is_active = 'Y'
OR NOT EXISTS (SELECT *
FROM employee e2
WHERE e2.deptno = e1.deptno
AND e2.is_primary = 'Y'
e2.is_active = 'Y')
AND e1.is_active = 'Y');