我想根据以下标准消除行
如果列WORK_DATE
具有重复日期,则我需要根据CHEQUE_DATE
23-JAN-2015
排除该行,但保留其他行。
主要唯一键是EMP_ID
表格内容:
EMP_ID | WORK_DATE | CHEQUE_DATE
------------------------------------
12345 | 10-SEP-2014 | 23-JAN-2015
12345 | 10-SEP-2014 | 03-OCT-2015
32789 | 14-OCT-2014 | 23-JAN-2015
32789 | 14-OCT-2014 | 10-OCT-2015
因此,在工作日期与员工重复的所有情况下,请删除CHEQUE_DATE
Jan 23, 2015
的行。
我想可以使用UNION
子句解决它。
答案 0 :(得分:0)
您可以将条件转换为where
条款。假设检查没有重复日期:
delete from data
where exists (select 1
from data d2
where d2.col1 = data.col1 and d2.work_date = data.work_date and
d2.cheque_date <> data.cheque_date
) and
cheque_date = date '2015-01-23';
答案 1 :(得分:0)
谢谢戈登,基于你的建议,我提到了以下内容。 它有点复杂,因为涉及多个表......但你的方向有所帮助。
SELECT
T.EMP_GROUP_CODE GROUP_CODE,
E.EMPLOYEE_ID EMP_ID,
SUBSTR(E.SURNAME||', '||nvl(E.FIRST_NAME,' '),1,30)
EMPLOYEE_NAME,
SUBSTR(TO_CHAR(T.WORK_DATE,'DD-MON-YYYY'),1,11) WORK_DATE,
SUBSTR(TO_CHAR(C.CHEQUE_DATE,'DD-MON-YYYY'),1,11) CHQ_DATE,
L.ABBRV_NAME LOCATION_NM,
SUBSTR(R.SURNAME||', '||R.FIRST_NAME,1,25) REPLACEMENT_NAME,
T.UNITS_IN_PERIOD,
T.HOURLY_RATE,
T.WORK_DATE SORT_DATE FROM EC_LOCATION L,
EC_PAY_PERIOD_CALENDAR C,
EC_EMPLOYEE E,
EC_EMPLOYEE R,
EC_EMPLOYEE_TIMESHEETS T
WHERE L.CODE = T.LOCATION_CODE
AND C.PAY_NUMBER = T.PAY_NUMBER
AND C.EMP_GROUP_CODE = T.EMP_GROUP_CODE
AND E.EMPLOYEE_ID = T.EMPLOYEE_ID
AND T.REPLACED_EMPLOYEE_ID = R.EMPLOYEE_ID (+)
AND (:P_EMP_GROUP = 'ALL'
OR T.EMP_GROUP_CODE = :P_EMP_GROUP)
AND T.WORK_DATE BETWEEN to_date(:P_START_DATE,'YYYYMMDD') AND to_date(:P_END_DATE,'YYYYMMDD')
AND T.EMP_GROUP_CODE IN ('5132E','5132S','5131DE','5131DS')
AND (EXISTS (select 1 from ec_employee_timesheets a, ec_pay_period_calendar b where a.PAY_NUMBER = b.PAY_NUMBER
AND a.EMP_GROUP_CODE = b.EMP_GROUP_CODE AND SUBSTR(TO_CHAR(b.CHEQUE_DATE,'DD-MON-YYYY'),1,11) <>
'23-JAN-2015'));