执行以下SQL,存在on子句的相同项,却还是新增一笔,请查找原因并提供修改错误后完整SQL:MERGE INTO DEPT_DAILY_SUMMARY T
USING (
WITH EMP_BASE AS(
SELECT SEG_SEGMENT_NO,ID,PLANT_NO,PLANT_NAME,DEPT_NO1,DEPT_NAME1,DEPT_NO2,DEPT_NAME2,DEPT_NO3,DEPT_NAME3,ID_NO_SZ,NAME_SZ,
SEX,JOB_ID,JD_MASTER_DESC,INDATE,OUTDATE
FROM V_DEPT_EMP V
WHERE /*DEPT_NO1='TC0300'
AND DEPT_NO3 NOT IN('TC0300','TC0310','TC0320')*/
(TEMP_COMPANY NOT IN ('Q366_Z','Q356_S') OR TEMP_COMPANY IS NULL)
AND (OUTDATE>TRUNC(SYSDATE) OR OUTDATE IS NULL)
AND INDATE<=TRUNC(SYSDATE)
),
ATTEND AS(
SELECT SEG_SEGMENT_NO,ID,PLANT_NO,PLANT_NAME,DEPT_NO1,DEPT_NAME1,DEPT_NO2,DEPT_NAME2,DEPT_NO3,DEPT_NAME3,E.ID_NO_SZ,NAME_SZ,
SEX,JOB_ID,JD_MASTER_DESC,INDATE,OUTDATE,SHIFT_ID,SHIFT_NAME,HOLIDAY,INACTUAL
FROM EMP_BASE E
LEFT JOIN HCP.EMP_CARDING_TEMP A ON A.PSN_ID=E.ID
WHERE A.INACTUAL IS NOT NULL
AND A.CDAY>=TRUNC(SYSDATE)
AND A.CDAY<TRUNC(SYSDATE)+1
),
EMP_ATTEND AS (
SELECT SEG_SEGMENT_NO,PLANT_NO,PLANT_NAME,DEPT_NO1,DEPT_NAME1,DEPT_NO2,DEPT_NAME2,DEPT_NO3,DEPT_NAME3,HOLIDAY,
COUNT(ID_NO_SZ) WORK_COUNT
FROM ATTEND
GROUP BY SEG_SEGMENT_NO,PLANT_NO,PLANT_NAME,DEPT_NO1,DEPT_NAME1,DEPT_NO2,DEPT_NAME2,DEPT_NO3,DEPT_NAME3,HOLIDAY
),
LEAVE_OVER8 AS(
SELECT T.PSN_ID,HCP.SF_BPM_ID_GET(T.PSN_ID, 9) ID_NO_SZ,HCP.SF_BPM_ID_GET(T.PSN_ID, 7) NAME_SZ,HCP.SF_BPM_ID_GET(T.PSN_ID, 2) DEPT_NO3,HCP.SF_BPM_ID_GET(T.PSN_ID, 3) DEPT_NAME3,BEGINTIME,ENDTIME,
(SELECT ABSENCE_NAME FROM HR_ABSENCE_TYPE
WHERE SEG_SEGMENT_NO = 'A001' AND ABSENCE_TYPE_ID = REASON) ABSENCE_NAME,HOUR,DAYS,MINS,REMARK FROM HR_ABSENCE T
WHERE HOUR>=8 --AND TRUNC(SYSDATE) BETWEEN TRUNC(BEGINTIME) AND TRUNC(ENDTIME) AND BEGINTIME<=TRUNC(SYSDATE)+1 AND ENDTIME>=TRUNC(SYSDATE) AND T.IS_ACTIVE = 'Y'
),
EMP_ATTEND_L AS (
SELECT SEG_SEGMENT_NO,PLANT_NO,PLANT_NAME,DEPT_NO1,DEPT_NAME1,DEPT_NO2,DEPT_NAME2,A.DEPT_NO3,A.DEPT_NAME3,HOLIDAY,WORK_COUNT,COUNT(ID_NO_SZ) LEAVE_CNT
FROM EMP_ATTEND A
LEFT JOIN LEAVE_OVER8 B ON A.DEPT_NO3=B.DEPT_NO3
GROUP BY SEG_SEGMENT_NO,PLANT_NO,PLANT_NAME,DEPT_NO1,DEPT_NAME1,DEPT_NO2,DEPT_NAME2,A.DEPT_NO3,A.DEPT_NAME3,HOLIDAY,WORK_COUNT
),
EMP_CNT AS (
SELECT SEG_SEGMENT_NO,PLANT_NO,PLANT_NAME,DEPT_NO1,DEPT_NAME1,DEPT_NO2,DEPT_NAME2,DEPT_NO3,DEPT_NAME3,COUNT(ID_NO_SZ) EMP_COUNT
FROM EMP_BASE
GROUP BY SEG_SEGMENT_NO,PLANT_NO,PLANT_NAME,DEPT_NO1,DEPT_NAME1,DEPT_NO2,DEPT_NAME2,DEPT_NO3,DEPT_NAME3
)SELECT A.SEG_SEGMENT_NO,A.PLANT_NO,A.PLANT_NAME,A.DEPT_NO1,A.DEPT_NAME1,A.DEPT_NO2,A.DEPT_NAME2,A.DEPT_NO3,A.DEPT_NAME3,B.HOLIDAY,A.EMP_COUNT,B.WORK_COUNT,B.LEAVE_CNT
FROM EMP_CNT A
LEFT JOIN EMP_ATTEND_L B ON A.PLANT_NO=B.PLANT_NO AND A.DEPT_NO3=B.DEPT_NO3
) S ON (T.CDATE = TRUNC(SYSDATE) AND T.PLANT=S.PLANT_NO AND T.DEPT_NO1=S.DEPT_NO1 AND T.DEPT_NO2=S.DEPT_NO2 AND T.DEPT_NO3=S.DEPT_NO3 AND T.HOLIDAY=S.HOLIDAY)
WHEN MATCHED THEN
UPDATE SET T.TOTAL_EMP = S.EMP_COUNT,T.WORK_EMP = S.WORK_COUNT,T.LEAVE_EMP = S.LEAVE_CNT,T.UPDATE_TIME=SYSDATE WHERE T.TOTAL_EMP <> S.EMP_COUNT AND T.WORK_EMP <> S.WORK_COUNT AND T.LEAVE_EMP <> S.LEAVE_CNT
WHEN NOT MATCHED THEN
INSERT VALUES (TRUNC(SYSDATE),S.PLANT_NO,S.DEPT_NO1,S.DEPT_NAME1,S.DEPT_NO2,S.DEPT_NAME2,S.DEPT_NO3,S.DEPT_NAME3,S.EMP_COUNT,S.WORK_COUNT,S.LEAVE_CNT,SYSTIMESTAMP,SYSTIMESTAMP,S.PLANT_NAME,S.SEG_SEGMENT_NO,S.HOLIDAY);