SQL 查询以获取单独列中每个元素的总和
SQL query to get sum of each element in seperate columns
几天前我问过这个问题,但解决方案并不完美,因此我用新的逻辑问这个问题-
SELECT person_number,taxable_earn, Basic_Life,Tax_Units
FROM (SELECT ppa.effective_date,
pra.result_value ,
pra.elementname,
prd.person_number
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))
上面的查询给出了类似 -
的输出
EMPLOYEENUMBER taxable_earn Basic_Life Tax_Units
10 6.7
10 7.8
10 9.2
我希望输出看起来像 -
EMPLOYEENUMBER taxable_earn Basic_Life Tax_Units
10 6.7 7.8 9.2
如何调整上述查询以获得此输出?
在最外层的每一列上使用 max 函数 select 然后分组,保持当前子 select 不变:
select person
, max(taxable_earn) taxable_earn
, max(basic_life) basic_life
, max(tax_units) tax_units
from ( <your current sub select as is > )
group by person;
只需从嵌套子查询中删除 ppa.effective_date,
:
SELECT person_number,taxable_earn, Basic_Life,Tax_Units
FROM (SELECT
pra.result_value ,
pra.elementname,
prd.person_number
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))
当存在共同的值并且您想将它们集中在一个地方时,请尝试使用“Group by”子句
几天前我问过这个问题,但解决方案并不完美,因此我用新的逻辑问这个问题-
SELECT person_number,taxable_earn, Basic_Life,Tax_Units
FROM (SELECT ppa.effective_date,
pra.result_value ,
pra.elementname,
prd.person_number
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))
上面的查询给出了类似 -
的输出 EMPLOYEENUMBER taxable_earn Basic_Life Tax_Units
10 6.7
10 7.8
10 9.2
我希望输出看起来像 -
EMPLOYEENUMBER taxable_earn Basic_Life Tax_Units
10 6.7 7.8 9.2
如何调整上述查询以获得此输出?
在最外层的每一列上使用 max 函数 select 然后分组,保持当前子 select 不变:
select person
, max(taxable_earn) taxable_earn
, max(basic_life) basic_life
, max(tax_units) tax_units
from ( <your current sub select as is > )
group by person;
只需从嵌套子查询中删除 ppa.effective_date,
:
SELECT person_number,taxable_earn, Basic_Life,Tax_Units
FROM (SELECT
pra.result_value ,
pra.elementname,
prd.person_number
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))
当存在共同的值并且您想将它们集中在一个地方时,请尝试使用“Group by”子句