sql удвоение запроса по функции суммы - PullRequest
0 голосов
/ 08 мая 2020

Я создавал запрос, и мне что-то не хватает. Этот запрос удваивает значение, которое не должно удваиваться. Хорошая новость в том, что он возвращает правильную сумму. Плохая новость в том, что сумма прибавляется сама к себе. Я думаю, что это группа, но я не уверен.

Проблема в производной таблице (temp3). Что я пробовал : 1) Я попытался переупорядочить группу по пункту, но это не помогло, но я открыт для предложений. 2) Я попытался запустить производную таблицу (temp3) отдельно, и она работает без удвоения значения. 3) Я повторно использую соединения между (temp1) с (temp3) и (temp2) соответственно, чтобы использовать современный синтаксис, но в любом случае без радости, но я открыт для предложений.

SELECT
temp1.last_name,
temp1.employee_number,
temp3.assignment_action_id,
temp3.effective_date,
sum(temp3.result_value)problem_value,
sum(temp2.result_value)result_value
from 
(SELECT papf.last_name,
        papf.first_name,
        papf.employee_number,
        paa.assignment_action_id
from    apps.per_all_people_f papf,
        apps.PER_ALL_ASSIGNMENTS_F paaf,
        pay_assignment_actions paa,
        PAY_PAYROLL_ACTIONS ppa
where   paaf.person_id           = papf.person_id
AND     papf.employee_number     like  NVL(:EMPLOYEE_NUMBER,'%')
AND     paaf.assignment_id       = paa.assignment_id
AND sysdate BETWEEN papf.effective_start_date AND papf.effective_end_date
AND sysdate BETWEEN paaf.effective_start_date AND paaf.effective_end_date
AND paa.assignment_action_id = paa.action_sequence
AND paa.payroll_action_id = ppa.payroll_action_id
AND( ppa.Effective_date BETWEEN  '01-jul-2019' AND '31-jul-2019'
or  ppa.Effective_date BETWEEN  '01-feb-2020' AND '29-feb-2020')) temp1,

-----------------------------------------------
                    (SELECT pet.element_type_id row_id ,
                     sum (to_number (prv.result_value)) result_value,                     
                     prr.assignment_action_id ,pact.effective_date,
                     pec.classification_name base_classification_name

  FROM apps.pay_element_types_f_tl pettl ,apps.pay_element_classifications_tl pectl ,
  apps.pay_element_types_f pet ,apps.pay_element_classifications pec ,
  apps.pay_input_values_f piv ,apps.pay_run_result_values prv ,
  apps.pay_run_results prr ,apps.pay_assignment_actions asact ,
  apps.pay_payroll_actions pact 
  WHERE pec.classification_id = pectl.classification_id 
  AND pet.element_type_id = pettl.element_type_id 
  AND prr.element_type_id = pet.element_type_id 
  AND prr.status IN ('P','PA') AND pact.payroll_action_id = asact.payroll_action_id 
  AND asact.assignment_action_id = prr.assignment_action_id AND pet.classification_id = pec.classification_id 
  AND piv.element_type_id = pet.element_type_id AND prv.input_value_id = piv.input_value_id 
  AND prv.run_result_id = prr.run_result_id AND piv.name = 'Pay Value' AND piv.uom = 'M' 
  AND pact.effective_date BETWEEN piv.effective_start_date AND piv.effective_end_date 
  AND pact.effective_date BETWEEN pet.effective_start_date AND pet.effective_end_date
  -------------------------------
  AND (pact.effective_date BETWEEN  '01-jul-2019' AND '31-jul-2019'
                    or   pact.Effective_date BETWEEN  '01-feb-2020' AND '29-feb-2020')
  AND pec.classification_name IN ('Statutory Deductions', 'Deductions',
                                  'Voluntary Deductions','Involuntary Deductions')
  AND nvl(prv.result_value,0) != 0
  ------------------------------
  AND not exists (SELECT pet1.element_type_id from pay_element_types_f pet1 
                    where pet1.element_name in ('Medical Tax Credit Used on LMPSM1', 'Medical Tax Credit Used on LMPSM2',
                    'Medical Tax Credit Used on LMPSM3', 'Medical Tax Credit Used on LMPSM4',
                    'Medical Tax Credit Used on LMPSM5', 'Medical Tax Credit Used on LMPSM6', 
                    'Medical Tax Credit Used on LMPSM7', 'Medical Tax Credit Used on LMPSM8', 
                    'Medical Tax Credit Used on LMPSM9', 'Medical Tax Credit Used on LMPSM10', 
                    'ZA_Tax_On_Multiple_Lump_Sums', 'ZA_Tax_On_Lump_Sums', ' Medical Tax Credit Used on LMPSM1',
                    ' Medical Tax Credit Used on LMPSM2', ' Medical Tax Credit Used on LMPSM3',
                    ' Medical Tax Credit Used on LMPSM4', ' Medical Tax Credit Used on LMPSM5', 
                    ' Medical Tax Credit Used on LMPSM6', ' Medical Tax Credit Used on LMPSM7',
                    ' Medical Tax Credit Used on LMPSM8', ' Medical Tax Credit Used on LMPSM9', 
                    ' Medical Tax Credit Used on LMPSM10' ) 
                    AND pet1.element_type_id = pet.element_type_id AND pet1.legislation_code = 'ZA') 
                    GROUP BY prr.assignment_action_id,pact.effective_date                   
                    ,pec.classification_name
                    ,pet.element_type_id)temp2                   
,
(SELECT pet.element_type_id row_id ,
                     nvl (pettl.reporting_name ,pettl.element_name) report_name ,

                     sum (to_number (prv.result_value)) result_value ,
                     pet.processing_priority ,prr.assignment_action_id ,pact.effective_date,
                     pec.classification_name base_classification_name

  FROM apps.pay_element_types_f_tl pettl ,apps.pay_element_classifications_tl pectl ,
  apps.pay_element_types_f pet ,apps.pay_element_classifications pec ,
  apps.pay_input_values_f piv ,apps.pay_run_result_values prv ,
  apps.pay_run_results prr ,apps.pay_assignment_actions asact ,
  apps.pay_payroll_actions pact 
  WHERE pec.classification_id = pectl.classification_id 
  AND pet.element_type_id = pettl.element_type_id 
  AND prr.element_type_id = pet.element_type_id 
  AND prr.status IN ('P','PA') AND pact.payroll_action_id = asact.payroll_action_id 
  AND asact.assignment_action_id = prr.assignment_action_id AND pet.classification_id = pec.classification_id 
  AND piv.element_type_id = pet.element_type_id AND prv.input_value_id = piv.input_value_id 
  AND prv.run_result_id = prr.run_result_id AND piv.name = 'Pay Value' AND piv.uom = 'M' 
  AND pact.effective_date BETWEEN piv.effective_start_date AND piv.effective_end_date 
  AND pact.effective_date BETWEEN pet.effective_start_date AND pet.effective_end_date
  AND (pact.effective_date BETWEEN  '01-jul-2019' AND '31-jul-2019'
                    or   pact.Effective_date BETWEEN  '01-feb-2020' AND '29-feb-2020')
  AND pec.CLASSIFICATION_NAME in ('Normal Income','Allowances','Direct Payments','Lump Sum Amounts')
  AND nvl(prv.result_value,0) != 0
  AND NOT EXISTS (SELECT pet1.element_type_id from pay_element_types_f pet1 
                    where pet1.element_name in ('Medical Tax Credit Used on LMPSM1', 'Medical Tax Credit Used on LMPSM2',
                    'Medical Tax Credit Used on LMPSM3', 'Medical Tax Credit Used on LMPSM4',
                    'Medical Tax Credit Used on LMPSM5', 'Medical Tax Credit Used on LMPSM6', 
                    'Medical Tax Credit Used on LMPSM7', 'Medical Tax Credit Used on LMPSM8', 
                    'Medical Tax Credit Used on LMPSM9', 'Medical Tax Credit Used on LMPSM10', 
                    'ZA_Tax_On_Multiple_Lump_Sums', 'ZA_Tax_On_Lump_Sums', 'Addl Medical Tax Credit Used on LMPSM1',
                    'Addl Medical Tax Credit Used on LMPSM2', 'Addl Medical Tax Credit Used on LMPSM3',
                    'Addl Medical Tax Credit Used on LMPSM4', 'Addl Medical Tax Credit Used on LMPSM5', 
                    'Addl Medical Tax Credit Used on LMPSM6', 'Addl Medical Tax Credit Used on LMPSM7',
                    'Addl Medical Tax Credit Used on LMPSM8', 'Addl Medical Tax Credit Used on LMPSM9', 
                    'Addl Medical Tax Credit Used on LMPSM10' ) 
                    AND pet1.element_type_id = pet.element_type_id AND pet1.legislation_code = 'ZA')
                    GROUP BY pec.classification_name ,prr.assignment_action_id ,pet.processing_priority
                    ,nvl (pettl.reporting_name ,pettl.element_name) 
                    ,pet.element_type_id,pact.effective_date)temp3
 where  temp1.ASSIGNMENT_ACTION_ID  =  temp3.ASSIGNMENT_ACTION_ID
 AND    temp1.ASSIGNMENT_ACTION_ID  =  temp2.ASSIGNMENT_ACTION_ID
 group by temp3.assignment_action_id,temp2.assignment_action_id,temp1.last_name,
        temp1.employee_number,temp3.effective_date,temp2.effective_date;

1 Ответ

0 голосов
/ 08 мая 2020

Вы уже делаете sum inside temp2 and temp3, возможно, это причина проблемы. Не могли бы вы еще раз посетить приведенный ниже

  sum (to_number (prv.result_value))

Также попробуйте использовать distinct в каждом операторе выбора, чтобы удалить дубликаты

...