sql - ORACLE根据列值动态查询where子句
问题描述
我已经检查了动态查询的 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');
谢谢
解决方案
您可以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');
推荐阅读
- node.js - 我可以将 vscode 扩展从现有发布者迁移到新发布者吗?
- docker - 在 pod 触发 kubectl exec 命令后,如何查找以退出代码 137 错误终止的命令的日志
- r - 抑制多个包/库加载消息
- python - 或熊猫系列的关键字
- arrays - 如何将可变数组划分为可变子数组
- java - 反向排序流
- http - 根本不需要 HTTPS,但似乎没有其他方法可以从网络浏览器
- cordova - 使用 Cordova 在 Web 应用程序中包装网页
- xml - 字符串中的 XSL 转换新行分隔符问题
- java - 仅当节点具有属性时,才使用 java 在 xml 中添加节点