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”子句