sql - 从查询中检索单行
问题描述
我正在创建一个查询以查找 date_to 为“31-dec-4712”(最新)的员工的工资详细信息。但是,如果 date_to 是 31-dec-4712 对于员工的两行,那么在其他情况下,当只有单行时,应该选择状态为“已批准”的那一行,那么应该按原样返回。
我为工资详细信息创建了以下查询。在上述情况下需要帮助
select distinct PAPF.EMPLOYEE_NUMBER ,
TO_CHAR (EMP_DOJ (PAPF.PERSON_ID),'DD-MON-YYYY' ) DOJ ,
TO_CHAR(HR_EMPLOYEE_ORIGINAL_DOJ(PAPF.EMPLOYEE_NUMBER,42) ,'DD- MON-YYYY' ) ORIGINAL_DOJ,
PPP.CHANGE_DATE,
PPP.DATE_TO,
PPP.PROPOSED_SALARY_N TOTAL_REMUN,
HR_GENERAL.DECODE_LOOKUP('PER_SAL_PROPOSAL_STATUS',APPROVED) status
from PER_ALL_ASSIGNMENTS_F PAAF,
PER_ALL_PEOPLE_F PAPF,
PER_PAY_PROPOSALS PPP
where 1 = 1
and PAPF.PERSON_ID = PAAF.PERSON_ID
and PAPF.BUSINESS_GROUP_ID = 21
and PAPF.CURRENT_EMPLOYEE_FLAG = 'Y'
and papf.employee_number = '109575'
and :P_DATE1 between PAAF.EFFECTIVE_START_DATE
and PAAF.EFFECTIVE_END_DATE
and :P_DATE1 between PAPF.EFFECTIVE_START_DATE
and PAPF.EFFECTIVE_END_DATE
and :P_DATE1 between PPP.CHANGE_DATE(+)
and NVL(PPP.DATE_TO, HR_GENERAL.END_OF_TIME)
and PPP.ASSIGNMENT_ID(+) = PAAF.ASSIGNMENT_ID
order by TO_NUMBER(PAPF.EMPLOYEE_NUMBER);
Emp_num DOJ ORIGINAL_DOJ CHANGE_DATE DATE_TO TOTAL_REMUN STATUS
109575 01-DEC-2016 24-JUL-2014 01-MAY-19 31-DEC-12 250000 Proposed
109575 01-DEC-2016 24-JUL-2014 01-APR-19 31-DEC-12 100000 Approved
解决方案
如果 STATUS 只取两个值,“Approved”和“Proposed”,您可以按 STATUS 排序并获取第一行。如果您拥有(或将来您将拥有)更多状态并且您想定义优先级,请在选择中添加一个带有“CASE”的列,该列为每个状态分配相应的优先级。然后您按此列排序并获取第一行....
推荐阅读
- javascript - Javascript 对 HTML 表中的空值排序错误
- javascript - 如何自动将任务分配给用户,以便所有用户可以拥有相同数量的任务
- javascript - Javascript:为什么我得到未定义的`post`?
- python - 如何使用 tkinter 正确格式化文本框中显示的数据?
- django - 如何使用 Graphql 查询不同的值?
- r - 根据 R 中的不同数据框将所有昵称替换为全名
- javascript - 使用 .map 和 store 创建过滤器
- mysql - 如何在通过使用现有数据库提交 mysql5.7 容器创建的 docker 容器中运行初始化脚本?
- puppet - 如何将一些字符串附加到木偶文件中的现有行(不是文件末尾)?
- python - 无法安装 pychalk:“FileNotFoundError:[Errno 2] 没有这样的文件或目录:'..\\MarkupSafe-1.1.1.dist-info\\METADATA”'