x
SELECT person_number,taxable_earn, Basic_Life,Tax_Units,Basic_Spouse,age_depnt,age_EE
FROM (SELECT
pra.result_value ,
pra.elementname,
prd.person_number ,
pap.date_of_birth age_depnt,
pra.date_of_birth age_EE
FROM pay_pay_relationships_dn prd
INNER JOIN pay_payroll_rel_actions pra ON prd.payroll_relationship_id = pra.payroll_relationship_id
INNER JOIN pay_payroll_actions ppa ON pra.payroll_action_id = ppa.payroll_action_id
INNER JOIN pay_all_payrolls_f pap ON ppa.element_type_id = pap.element_type_id
WHERE ppa.payroll_id = pap.payroll_id
AND ppa.effective_date BETWEEN :p_start_date AND :p_end_date)
PIVOT (SUM(result_value )
FOR elementname IN ('taxable_earn' taxable_earn, 'Basic_Life' Basic_Life, 'Tax_Units' Tax_Units,'Basic_Spouse', Basic_Spouse))
The above query gives me the data like
person_number taxable_earn Basic_Life Tax_Units Basic_Spouse depent_dob age_EE
10 78.9 10.5 39
20 76.7 10.2 12.3 32 21
30 2.3 10.3 8.9 19.0 34 25
40 14.3 8.9 19.0 52 67
I want the count of employees and total of each of the above columns in the below format –
Basic_Life taxable_earn Basic_Spouse
Total 34.8 157.9 50.3
EMP_count 3 3 3
what function should I use for this ?
Advertisement
Answer
WITH pivot_subquery as
(
SELECT person_number,taxable_earn, Basic_Life,Tax_Units,Basic_Spouse,age_depnt,age_EE
FROM (SELECT
pra.result_value ,
pra.elementname,
prd.person_number ,
pap.date_of_birth age_depnt,
pra.date_of_birth age_EE
FROM pay_pay_relationships_dn prd
INNER JOIN pay_payroll_rel_actions pra ON prd.payroll_relationship_id = pra.payroll_relationship_id
INNER JOIN pay_payroll_actions ppa ON pra.payroll_action_id = ppa.payroll_action_id
INNER JOIN pay_all_payrolls_f pap ON ppa.element_type_id = pap.element_type_id
WHERE ppa.payroll_id = pap.payroll_id
AND ppa.effective_date BETWEEN :p_start_date AND :p_end_date)
PIVOT (SUM(result_value )
FOR elementname IN ('taxable_earn' taxable_earn, 'Basic_Life' Basic_Life, 'Tax_Units' Tax_Units,'Basic_Spouse', Basic_Spouse))
)
select 'Total' as row_desc
,sum(nvl(Basic_Life,0.0)) as Basic_Life
,sum(nvl(taxable_earn,0.0)) as taxable_earn
,sum(nvl(Basic_Spouse,0.0)) as Basic_Spouse
from pivot_subquery
union all
select 'EMP_count' as row_desc
,nvl((select count(*) from pivot_subquery where Basic_Life is not null),0) as Basic_Life
,nvl((select count(*) from pivot_subquery where taxable_earnis not null),0) as taxable_earn
,nvl((select count(*) from pivot_subquery where Basic_Spouse is not null),0) as Basic_Spouse
from dual