首页 > 解决方案 > 从查询中检索单行

问题描述

我正在创建一个查询以查找 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

标签: sqloracleplsql

解决方案


如果 STATUS 只取两个值,“Approved”和“Proposed”,您可以按 STATUS 排序并获取第一行。如果您拥有(或将来您将拥有)更多状态并且您想定义优先级,请在选择中添加一个带有“CASE”的列,该列为每个状态分配相应的优先级。然后您按此列排序并获取第一行....


推荐阅读