Обновить заявление с DENSE_RANK - PullRequest
1 голос
/ 20 сентября 2019

Версия БД: Oracle 12C

Ниже приведены мои данные.

PROCESS_INSTANCE, ACCRUAL_YEAR, ACCR_PERIOD, ACCRUAL_YEAR1, ACCR_PERIOD1, PROJECT_ID, EMPLID, PERIOD_END_D_ моя таблица * REPORT_UE1005 *

Я хочу обновить значение столбца REGULAR_HOURS, CTS_ACC_OT_HRS как STANDARD_HOURS в той же таблице.

Всякий раз, когда у сотрудника есть более одной строки для комбинации полей Key (исключая ключ PROJECT_ID), я хочу обновить REGULAR_HOURS, CTS_ACC_OT_HRS в первой строке с использованием ранга (process_instance, ACCRUAL_YEAR, ACCR_PERIOD, ACCRUAL_YEAR1, ACCR_PERIOD1, EMPLID, PERIOD_END_DT, REPORT_DUE_DATE).

PROCESS_INSTANCE    ACCRUAL_YEAR    ACCR_PERIOD ACCRUAL_YEAR1   ACCR_PERIOD1    PROJECT_ID  EMPLID  PERIOD_END_DT   REPORT_DUE_DATE STANDARD_HOURS  REGULAR_HOURS   OVERTIME_HOURS  CTS_ACC_OT_HRS
22196108    2019    8   2019    5   1000237975  787792  03-MAY-19   01-MAY-19   9   0   0   0
22196108    2019    8   2019    5   1000251958  787792  03-MAY-19   01-MAY-19   9   0   0   0
22196108    2019    8   2019    5   1000251958  787792  03-MAY-19   02-MAY-19   9   0   0   0
22196108    2019    8   2019    5   1000251958  787792  03-MAY-19   03-MAY-19   9   0   0   0
22196108    2019    8   2019    5   1000251958  787792  10-MAY-19   06-MAY-19   9   0   0   0
22196108    2019    8   2019    5   1000251958  787792  10-MAY-19   07-MAY-19   9   0   0   0
22196108    2019    8   2019    5   1000251958  787792  10-MAY-19   08-MAY-19   9   0   0   0
22196108    2019    8   2019    5   1000251958  787792  10-MAY-19   09-MAY-19   9   0   0   0
22196108    2019    8   2019    5   1000251958  787792  10-MAY-19   10-MAY-19   9   0   0   0
1011 * 1011: в подчиненных сотрудниках

1011 * требуется 1010две строки для REPORT_DUE_DATE 01-MAY-19.

Поэтому я хочу обновить REGULAR_HOURS и CTS_ACC_OT_HRS как STANDARD_HOURS для одной строки для даты выполнения отчета 01-MAY-19.

Примечание: необходимоизмените STANDARD_HOURS на 0 для дополнительных строк.

PROCESS_INSTANCE    ACCRUAL_YEAR    ACCR_PERIOD ACCRUAL_YEAR1   ACCR_PERIOD1    PROJECT_ID  EMPLID  PERIOD_END_DT   REPORT_DUE_DATE STANDARD_HOURS  REGULAR_HOURS   OVERTIME_HOURS  CTS_ACC_OT_HRS
22196108    2019    8   2019    5   1000237975  787792  03-MAY-19   01-MAY-19   9   9   0   9
22196108    2019    8   2019    5   1000251958  787792  03-MAY-19   01-MAY-19   0   0   0   0
22196108    2019    8   2019    5   1000251958  787792  03-MAY-19   02-MAY-19   9   9   0   9
22196108    2019    8   2019    5   1000251958  787792  03-MAY-19   03-MAY-19   9   9   0   9
22196108    2019    8   2019    5   1000251958  787792  10-MAY-19   06-MAY-19   9   9   0   9
22196108    2019    8   2019    5   1000251958  787792  10-MAY-19   07-MAY-19   9   9   0   9
22196108    2019    8   2019    5   1000251958  787792  10-MAY-19   08-MAY-19   9   9   0   9
22196108    2019    8   2019    5   1000251958  787792  10-MAY-19   09-MAY-19   9   9   0   9
22196108    2019    8   2019    5   1000251958  787792  10-MAY-19   10-MAY-19   9   9   0   9
CREATE TABLE PS_CT_IQN_ACC_STG (PROCESS_INSTANCE DECIMAL(10) NOT NULL,  
   ACCRUAL_YEAR SMALLINT NOT NULL,  
   ACCR_PERIOD SMALLINT NOT NULL,  
   ACCRUAL_YEAR1 SMALLINT NOT NULL,  
   ACCR_PERIOD1 SMALLINT NOT NULL,  
   CTS_ACCRUAL_TYPE VARCHAR2(3)  NULL,  
   CTS_BLNK_TS_FLAG VARCHAR2(1)  NULL,  
   PROJECT_ID VARCHAR2(15)  NOT NULL,  
   ALLOCATION_PERCENT DECIMAL(13, 10)  NULL,  
   PROJ_ACTIVITY_ID VARCHAR2(15)  NULL,  
   EMPLID VARCHAR2(11) NOT NULL,  
   HIRE_DT DATE,  
   ACTION_DT DATE,  
   ACTION VARCHAR2(3)  NULL,  
   CTS_WO_ID VARCHAR2(15)  NULL,  
   CTS_WO_END_DATE DATE,  
   CTS_WO_REG_RATE DECIMAL(15, 2)  NULL,  
   CTS_WO_OT_RATE DECIMAL(15, 2)  NULL,  
   CTS_WO_CURRENCY VARCHAR2(3)  NULL,  
   STANDARD_RATE DECIMAL(15, 2)  NULL,  
   CURRENCY_CD VARCHAR2(3)  NULL,  
   VENDOR_ID VARCHAR2(10)  NULL,  
   CTS_OT_BASIS VARCHAR2(10)  NULL,  
   COUNTRY VARCHAR2(3)  NULL,  
   LOCATION VARCHAR2(10)  NULL,  
   HOLIDAY_SCHEDULE VARCHAR2(6)  NULL,  
   BUSINESS_UNIT VARCHAR2(5)  NULL,  
   PERIOD_END_DT DATE,  
   REPORT_DUE_DATE DATE,  
   CTS_WORKDAY VARCHAR2(3)  NULL,  
   TIME_QUANTITY DECIMAL(14, 2)  NULL,  
   STANDARD_HOURS DECIMAL(14, 2)  NULL,  
   REGULAR_HOURS DECIMAL(15, 3)  NULL,  
   OVERTIME_HOURS DECIMAL(14, 2)  NULL,  
   TIME_SHEET_STATUS VARCHAR2(3)  NULL,  
   POLICY_ID VARCHAR2(50)  NULL,  
   CTS_ACC_REG_HRS DECIMAL(5, 2)  NULL,  
   CTS_ACC_OT_HRS DECIMAL(5, 2)  NULL,  
   CTS_ACCR_BASE_AMT DECIMAL(15, 2)  NULL,  
   CTS_ACCR_OT_AMT DECIMAL(15, 2)  NULL,  
   CTS_ACCR_AMT_TOTAL DECIMAL(15, 2)  NULL);  

CREATE UNIQUE  iNDEX PS_CT_IQN_ACC_STG ON PS_CT_IQN_ACC_STG  
 (PROCESS_INSTANCE,  
   ACCRUAL_YEAR,  
   ACCR_PERIOD,  
   ACCRUAL_YEAR1,  
   ACCR_PERIOD1,  
   PROJECT_ID,  
   EMPLID,  
   PERIOD_END_DT,  
   REPORT_DUE_DATE);  

Вставьте сценарии:

Insert into PS_CT_IQN_ACC_STG (PROCESS_INSTANCE,ACCRUAL_YEAR,ACCR_PERIOD,ACCRUAL_YEAR1,ACCR_PERIOD1,CTS_ACCRUAL_TYPE,CTS_BLNK_TS_FLAG,PROJECT_ID,ALLOCATION_PERCENT,PROJ_ACTIVITY_ID,EMPLID,HIRE_DT,ACTION_DT,ACTION,CTS_WO_ID,CTS_WO_END_DATE,CTS_WO_REG_RATE,CTS_WO_OT_RATE,CTS_WO_CURRENCY,STANDARD_RATE,CURRENCY_CD,VENDOR_ID,CTS_OT_BASIS,COUNTRY,LOCATION,HOLIDAY_SCHEDULE,BUSINESS_UNIT,PERIOD_END_DT,REPORT_DUE_DATE,CTS_WORKDAY,TIME_QUANTITY,STANDARD_HOURS,REGULAR_HOURS,OVERTIME_HOURS,TIME_SHEET_STATUS,POLICY_ID,CTS_ACC_REG_HRS,CTS_ACC_OT_HRS,CTS_ACCR_BASE_AMT,CTS_ACCR_OT_AMT,CTS_ACCR_AMT_TOTAL) values (22196108,2019,8,2019,5,'H','Y','1000237975',0,'TBD','787792',to_date('29-APR-2019','DD-MON-YYYY'),to_date('07-MAY-2019','DD-MON-YYYY'),'XFR','12697051',to_date('28-OCT-2019','DD-MON-YYYY'),110,110,' ',65,'USD','0000010018','Weekly','USA','USGADUUA01','HUSA','US410',to_date('03-MAY-2019','DD-MON-YYYY'),to_date('01-MAY-2019','DD-MON-YYYY'),'Y',0,9,0,0,' ','Project',0,0,0,0,0);  
Insert into PS_CT_IQN_ACC_STG (PROCESS_INSTANCE,ACCRUAL_YEAR,ACCR_PERIOD,ACCRUAL_YEAR1,ACCR_PERIOD1,CTS_ACCRUAL_TYPE,CTS_BLNK_TS_FLAG,PROJECT_ID,ALLOCATION_PERCENT,PROJ_ACTIVITY_ID,EMPLID,HIRE_DT,ACTION_DT,ACTION,CTS_WO_ID,CTS_WO_END_DATE,CTS_WO_REG_RATE,CTS_WO_OT_RATE,CTS_WO_CURRENCY,STANDARD_RATE,CURRENCY_CD,VENDOR_ID,CTS_OT_BASIS,COUNTRY,LOCATION,HOLIDAY_SCHEDULE,BUSINESS_UNIT,PERIOD_END_DT,REPORT_DUE_DATE,CTS_WORKDAY,TIME_QUANTITY,STANDARD_HOURS,REGULAR_HOURS,OVERTIME_HOURS,TIME_SHEET_STATUS,POLICY_ID,CTS_ACC_REG_HRS,CTS_ACC_OT_HRS,CTS_ACCR_BASE_AMT,CTS_ACCR_OT_AMT,CTS_ACCR_AMT_TOTAL) values (22196108,2019,8,2019,5,'H','Y','1000251958',0,'TBD','787792',to_date('29-APR-2019','DD-MON-YYYY'),to_date('07-MAY-2019','DD-MON-YYYY'),'XFR','12697051',to_date('28-OCT-2019','DD-MON-YYYY'),110,110,' ',65,'USD','0000010018','Weekly','USA','USGADUUA01','HUSA','US410',to_date('03-MAY-2019','DD-MON-YYYY'),to_date('01-MAY-2019','DD-MON-YYYY'),'Y',0,9,0,0,' ','Project',0,0,0,0,0);  
Insert into PS_CT_IQN_ACC_STG (PROCESS_INSTANCE,ACCRUAL_YEAR,ACCR_PERIOD,ACCRUAL_YEAR1,ACCR_PERIOD1,CTS_ACCRUAL_TYPE,CTS_BLNK_TS_FLAG,PROJECT_ID,ALLOCATION_PERCENT,PROJ_ACTIVITY_ID,EMPLID,HIRE_DT,ACTION_DT,ACTION,CTS_WO_ID,CTS_WO_END_DATE,CTS_WO_REG_RATE,CTS_WO_OT_RATE,CTS_WO_CURRENCY,STANDARD_RATE,CURRENCY_CD,VENDOR_ID,CTS_OT_BASIS,COUNTRY,LOCATION,HOLIDAY_SCHEDULE,BUSINESS_UNIT,PERIOD_END_DT,REPORT_DUE_DATE,CTS_WORKDAY,TIME_QUANTITY,STANDARD_HOURS,REGULAR_HOURS,OVERTIME_HOURS,TIME_SHEET_STATUS,POLICY_ID,CTS_ACC_REG_HRS,CTS_ACC_OT_HRS,CTS_ACCR_BASE_AMT,CTS_ACCR_OT_AMT,CTS_ACCR_AMT_TOTAL) values (22196108,2019,8,2019,5,'H','Y','1000251958',0,'TBD','787792',to_date('29-APR-2019','DD-MON-YYYY'),to_date('07-MAY-2019','DD-MON-YYYY'),'XFR','12697051',to_date('28-OCT-2019','DD-MON-YYYY'),110,110,' ',65,'USD','0000010018','Weekly','USA','USGADUUA01','HUSA','US410',to_date('03-MAY-2019','DD-MON-YYYY'),to_date('02-MAY-2019','DD-MON-YYYY'),'Y',0,9,0,0,' ','Project',0,0,0,0,0);  
Insert into PS_CT_IQN_ACC_STG (PROCESS_INSTANCE,ACCRUAL_YEAR,ACCR_PERIOD,ACCRUAL_YEAR1,ACCR_PERIOD1,CTS_ACCRUAL_TYPE,CTS_BLNK_TS_FLAG,PROJECT_ID,ALLOCATION_PERCENT,PROJ_ACTIVITY_ID,EMPLID,HIRE_DT,ACTION_DT,ACTION,CTS_WO_ID,CTS_WO_END_DATE,CTS_WO_REG_RATE,CTS_WO_OT_RATE,CTS_WO_CURRENCY,STANDARD_RATE,CURRENCY_CD,VENDOR_ID,CTS_OT_BASIS,COUNTRY,LOCATION,HOLIDAY_SCHEDULE,BUSINESS_UNIT,PERIOD_END_DT,REPORT_DUE_DATE,CTS_WORKDAY,TIME_QUANTITY,STANDARD_HOURS,REGULAR_HOURS,OVERTIME_HOURS,TIME_SHEET_STATUS,POLICY_ID,CTS_ACC_REG_HRS,CTS_ACC_OT_HRS,CTS_ACCR_BASE_AMT,CTS_ACCR_OT_AMT,CTS_ACCR_AMT_TOTAL) values (22196108,2019,8,2019,5,'H','Y','1000251958',0,'TBD','787792',to_date('29-APR-2019','DD-MON-YYYY'),to_date('07-MAY-2019','DD-MON-YYYY'),'XFR','12697051',to_date('28-OCT-2019','DD-MON-YYYY'),110,110,' ',65,'USD','0000010018','Weekly','USA','USGADUUA01','HUSA','US410',to_date('03-MAY-2019','DD-MON-YYYY'),to_date('03-MAY-2019','DD-MON-YYYY'),'Y',0,9,0,0,' ','Project',0,0,0,0,0);  
Insert into PS_CT_IQN_ACC_STG (PROCESS_INSTANCE,ACCRUAL_YEAR,ACCR_PERIOD,ACCRUAL_YEAR1,ACCR_PERIOD1,CTS_ACCRUAL_TYPE,CTS_BLNK_TS_FLAG,PROJECT_ID,ALLOCATION_PERCENT,PROJ_ACTIVITY_ID,EMPLID,HIRE_DT,ACTION_DT,ACTION,CTS_WO_ID,CTS_WO_END_DATE,CTS_WO_REG_RATE,CTS_WO_OT_RATE,CTS_WO_CURRENCY,STANDARD_RATE,CURRENCY_CD,VENDOR_ID,CTS_OT_BASIS,COUNTRY,LOCATION,HOLIDAY_SCHEDULE,BUSINESS_UNIT,PERIOD_END_DT,REPORT_DUE_DATE,CTS_WORKDAY,TIME_QUANTITY,STANDARD_HOURS,REGULAR_HOURS,OVERTIME_HOURS,TIME_SHEET_STATUS,POLICY_ID,CTS_ACC_REG_HRS,CTS_ACC_OT_HRS,CTS_ACCR_BASE_AMT,CTS_ACCR_OT_AMT,CTS_ACCR_AMT_TOTAL) values (22196108,2019,8,2019,5,'H','Y','1000251958',0,'TBD','787792',to_date('29-APR-2019','DD-MON-YYYY'),to_date('07-MAY-2019','DD-MON-YYYY'),'XFR','12697051',to_date('28-OCT-2019','DD-MON-YYYY'),110,110,' ',65,'USD','0000010018','Weekly','USA','USGADUUA01','HUSA','US410',to_date('10-MAY-2019','DD-MON-YYYY'),to_date('06-MAY-2019','DD-MON-YYYY'),'Y',0,9,0,0,' ','Project',0,0,0,0,0);  
Insert into PS_CT_IQN_ACC_STG (PROCESS_INSTANCE,ACCRUAL_YEAR,ACCR_PERIOD,ACCRUAL_YEAR1,ACCR_PERIOD1,CTS_ACCRUAL_TYPE,CTS_BLNK_TS_FLAG,PROJECT_ID,ALLOCATION_PERCENT,PROJ_ACTIVITY_ID,EMPLID,HIRE_DT,ACTION_DT,ACTION,CTS_WO_ID,CTS_WO_END_DATE,CTS_WO_REG_RATE,CTS_WO_OT_RATE,CTS_WO_CURRENCY,STANDARD_RATE,CURRENCY_CD,VENDOR_ID,CTS_OT_BASIS,COUNTRY,LOCATION,HOLIDAY_SCHEDULE,BUSINESS_UNIT,PERIOD_END_DT,REPORT_DUE_DATE,CTS_WORKDAY,TIME_QUANTITY,STANDARD_HOURS,REGULAR_HOURS,OVERTIME_HOURS,TIME_SHEET_STATUS,POLICY_ID,CTS_ACC_REG_HRS,CTS_ACC_OT_HRS,CTS_ACCR_BASE_AMT,CTS_ACCR_OT_AMT,CTS_ACCR_AMT_TOTAL) values (22196108,2019,8,2019,5,'H','Y','1000251958',0,'TBD','787792',to_date('29-APR-2019','DD-MON-YYYY'),to_date('07-MAY-2019','DD-MON-YYYY'),'XFR','12697051',to_date('28-OCT-2019','DD-MON-YYYY'),110,110,' ',65,'USD','0000010018','Weekly','USA','USGADUUA01','HUSA','US410',to_date('10-MAY-2019','DD-MON-YYYY'),to_date('07-MAY-2019','DD-MON-YYYY'),'Y',0,9,0,0,' ','Project',0,0,0,0,0);  
Insert into PS_CT_IQN_ACC_STG (PROCESS_INSTANCE,ACCRUAL_YEAR,ACCR_PERIOD,ACCRUAL_YEAR1,ACCR_PERIOD1,CTS_ACCRUAL_TYPE,CTS_BLNK_TS_FLAG,PROJECT_ID,ALLOCATION_PERCENT,PROJ_ACTIVITY_ID,EMPLID,HIRE_DT,ACTION_DT,ACTION,CTS_WO_ID,CTS_WO_END_DATE,CTS_WO_REG_RATE,CTS_WO_OT_RATE,CTS_WO_CURRENCY,STANDARD_RATE,CURRENCY_CD,VENDOR_ID,CTS_OT_BASIS,COUNTRY,LOCATION,HOLIDAY_SCHEDULE,BUSINESS_UNIT,PERIOD_END_DT,REPORT_DUE_DATE,CTS_WORKDAY,TIME_QUANTITY,STANDARD_HOURS,REGULAR_HOURS,OVERTIME_HOURS,TIME_SHEET_STATUS,POLICY_ID,CTS_ACC_REG_HRS,CTS_ACC_OT_HRS,CTS_ACCR_BASE_AMT,CTS_ACCR_OT_AMT,CTS_ACCR_AMT_TOTAL) values (22196108,2019,8,2019,5,'H','Y','1000251958',0,'TBD','787792',to_date('29-APR-2019','DD-MON-YYYY'),to_date('07-MAY-2019','DD-MON-YYYY'),'XFR','12697051',to_date('28-OCT-2019','DD-MON-YYYY'),110,110,' ',65,'USD','0000010018','Weekly','USA','USGADUUA01','HUSA','US410',to_date('10-MAY-2019','DD-MON-YYYY'),to_date('08-MAY-2019','DD-MON-YYYY'),'Y',0,9,0,0,' ','Project',0,0,0,0,0);  
Insert into PS_CT_IQN_ACC_STG (PROCESS_INSTANCE,ACCRUAL_YEAR,ACCR_PERIOD,ACCRUAL_YEAR1,ACCR_PERIOD1,CTS_ACCRUAL_TYPE,CTS_BLNK_TS_FLAG,PROJECT_ID,ALLOCATION_PERCENT,PROJ_ACTIVITY_ID,EMPLID,HIRE_DT,ACTION_DT,ACTION,CTS_WO_ID,CTS_WO_END_DATE,CTS_WO_REG_RATE,CTS_WO_OT_RATE,CTS_WO_CURRENCY,STANDARD_RATE,CURRENCY_CD,VENDOR_ID,CTS_OT_BASIS,COUNTRY,LOCATION,HOLIDAY_SCHEDULE,BUSINESS_UNIT,PERIOD_END_DT,REPORT_DUE_DATE,CTS_WORKDAY,TIME_QUANTITY,STANDARD_HOURS,REGULAR_HOURS,OVERTIME_HOURS,TIME_SHEET_STATUS,POLICY_ID,CTS_ACC_REG_HRS,CTS_ACC_OT_HRS,CTS_ACCR_BASE_AMT,CTS_ACCR_OT_AMT,CTS_ACCR_AMT_TOTAL) values (22196108,2019,8,2019,5,'H','Y','1000251958',0,'TBD','787792',to_date('29-APR-2019','DD-MON-YYYY'),to_date('07-MAY-2019','DD-MON-YYYY'),'XFR','12697051',to_date('28-OCT-2019','DD-MON-YYYY'),110,110,' ',65,'USD','0000010018','Weekly','USA','USGADUUA01','HUSA','US410',to_date('10-MAY-2019','DD-MON-YYYY'),to_date('09-MAY-2019','DD-MON-YYYY'),'Y',0,9,0,0,' ','Project',0,0,0,0,0);  
Insert into PS_CT_IQN_ACC_STG (PROCESS_INSTANCE,ACCRUAL_YEAR,ACCR_PERIOD,ACCRUAL_YEAR1,ACCR_PERIOD1,CTS_ACCRUAL_TYPE,CTS_BLNK_TS_FLAG,PROJECT_ID,ALLOCATION_PERCENT,PROJ_ACTIVITY_ID,EMPLID,HIRE_DT,ACTION_DT,ACTION,CTS_WO_ID,CTS_WO_END_DATE,CTS_WO_REG_RATE,CTS_WO_OT_RATE,CTS_WO_CURRENCY,STANDARD_RATE,CURRENCY_CD,VENDOR_ID,CTS_OT_BASIS,COUNTRY,LOCATION,HOLIDAY_SCHEDULE,BUSINESS_UNIT,PERIOD_END_DT,REPORT_DUE_DATE,CTS_WORKDAY,TIME_QUANTITY,STANDARD_HOURS,REGULAR_HOURS,OVERTIME_HOURS,TIME_SHEET_STATUS,POLICY_ID,CTS_ACC_REG_HRS,CTS_ACC_OT_HRS,CTS_ACCR_BASE_AMT,CTS_ACCR_OT_AMT,CTS_ACCR_AMT_TOTAL) values (22196108,2019,8,2019,5,'H','Y','1000251958',0,'TBD','787792',to_date('29-APR-2019','DD-MON-YYYY'),to_date('07-MAY-2019','DD-MON-YYYY'),'XFR','12697051',to_date('28-OCT-2019','DD-MON-YYYY'),110,110,' ',65,'USD','0000010018','Weekly','USA','USGADUUA01','HUSA','US410',to_date('10-MAY-`2019','DD-MON-YYYY'),to_date('10-MAY-2019','DD-MON-YYYY'),'Y',0,9,0,0,' ','Project',0,0,0,0,0);` 

1 Ответ

1 голос
/ 23 сентября 2019

Вопрос не в том, как сортировать две строки с одним и тем же REPORT_DUE_DATE.Таким образом, PROJECT_ID используется в предложении ORDER BY.Пожалуйста, измените это в соответствии с вашим требованием сортировки.

merge into PS_CT_IQN_ACC_STG a 
      using (
        select PROCESS_INSTANCE,
               ACCRUAL_YEAR, 
               ACCR_PERIOD, 
               ACCRUAL_YEAR1, 
               ACCR_PERIOD1,
               PROJECT_ID,
               EMPLID, 
               PERIOD_END_DT, 
               REPORT_DUE_DATE,
               case when rn = 1
                    then standard_hours
                    else regular_hours end regular_hours, 
               case when rn = 1
                    then standard_hours
                    else cts_Acc_ot_hrs end cts_Acc_ot_hrs, 
               case when rn = 1
                    then standard_hours
                    else 0 end standard_hours,rn
          from (
                select PROCESS_INSTANCE,
                       ACCRUAL_YEAR, 
                       ACCR_PERIOD, 
                       ACCRUAL_YEAR1, 
                       ACCR_PERIOD1,
                       PROJECT_ID,
                       EMPLID, 
                       PERIOD_END_DT, 
                       REPORT_DUE_DATE,
                       regular_hours, 
                       standard_hours, 
                       cts_Acc_ot_hrs, 
                       row_number() over( partition by PROCESS_INSTANCE,
                                                       ACCRUAL_YEAR, 
                                                       ACCR_PERIOD, 
                                                       ACCRUAL_YEAR1, 
                                                       ACCR_PERIOD1,
                                                       --PROJECT_ID,
                                                       EMPLID, 
                                                       PERIOD_END_DT, 
                                                       report_due_date 
                                              order by PROJECT_ID) rn
                  from PS_CT_IQN_ACC_STG) 
         ) b
         on (   a.PROCESS_INSTANCE = b.PROCESS_INSTANCE
            and a.ACCRUAL_YEAR = b.ACCRUAL_YEAR
            and a.ACCR_PERIOD = b.ACCR_PERIOD
            and a.ACCRUAL_YEAR1 = b.ACCRUAL_YEAR1
            and a.ACCR_PERIOD1 = b.ACCR_PERIOD1
            and a.PROJECT_ID = b.PROJECT_ID
            and a.EMPLID = b.EMPLID
            and a.PERIOD_END_DT = b.REPORT_DUE_DATE)
       when matched 
       then update set a.REGULAR_HOURS = b.REGULAR_HOURS, 
                       a.CTS_ACC_OT_HRS = b.CTS_ACC_OT_HRS,
                       a.STANDARD_HOURS = b.STANDARD_HOURS;

Я пробовал это в Oracle Live SQL.

Запрос в разделе «Использование» работает нормально и выдает ожидаемый результат.

PROCESS_INSTANCE    ACCRUAL_YEAR    ACCR_PERIOD    ACCRUAL_YEAR1    ACCR_PERIOD1    PROJECT_ID    EMPLID    PERIOD_END_DT   REPORT_DUE_DATE     REGULAR_HOURS   CTS_ACC_OT_HRS  STANDARD_HOURS  RN
22196108            2019            8               2019            5               1000237975    787792    03-MAY-19       01-MAY-19           9               9               9               1
22196108            2019            8               2019            5               1000251958    787792    03-MAY-19       01-MAY-19           0               0               0               2
22196108            2019            8               2019            5               1000251958    787792    03-MAY-19       02-MAY-19           9               9               9               1

Но оператор слияния не работает должным образом.Второй ряд получает все 9 с.В первой строке сохраняется 9 для standard_hours вместо обновления до нуля.

PROCESS_INSTANCE    ACCRUAL_YEAR    ACCR_PERIOD ACCRUAL_YEAR1   ACCR_PERIOD1    PROJECT_ID  EMPLID  PERIOD_END_DT   REPORT_DUE_DATE REGULAR_HOURS   CTS_ACC_OT_HRS  STANDARD_HOURS
22196108            2019            8           2019            5               1000237975  787792  03-MAY-19       01-MAY-19       0               0               9
22196108            2019            8           2019            5               1000251958  787792  03-MAY-19       01-MAY-19       9               9               9
22196108            2019            8           2019            5               1000251958  787792  03-MAY-19       02-MAY-19       9               9               9

Я создал уменьшенную версию вашей таблицы со столбцами типов данных SMALLINT, DECIMAL, DATE и VARCHAR2 в базе данных Oracle 12c.Оператор MERGE отлично работает в базе данных Oracle 12c.

Я не уверен, почему это не работает в Oracle Live SQL.Но решение работает на миниатюрной таблице моделей в базе данных Oracle 12c.Пожалуйста, проверьте решение в вашей базе данных.Надеюсь, что это работает.

...