区分来自2个表的值以及来自相同两个表的聚合总和

时间:2015-10-30 13:31:20

标签: sql teradata

我想做以下事情:

  • 从表A和B中获取不同的名称和年龄。
  • 然后我想总结表A和表B中每组姓名和年龄的薪水。我希望输出显示:名称,年龄,(总和表A),(总和表B),(总和表A-总和表B)

请参阅以下示例:

表A:

  1. 姓名= Al,年龄= 20,薪水= 10
  2. 姓名= Al,年龄= 20,薪水= 20
  3. 姓名= Bob,年龄= 22,薪水= 25
  4. 表B

    1. 姓名= Al,年龄= 20,薪水= 30
    2. 姓名= Al,年龄= 20,薪水= 40
    3. 姓名= Bob,年龄= 22,薪水= 35
    4. 预期产出:

      1. 名称= Al,年龄= 20,SalaryA = 30,SalaryB = 70,差异= -40
      2. 姓名= Bob,年龄= 22,SalaryA = 25,SalaryB = 35,差异= -10
      3. 如何在SQL中编写此代码?我使用Teradata。

2 个答案:

答案 0 :(得分:1)

您可以group by并使用union all来组合来自tableA和tableB的查询的结果。

 select name, age, max(salaryA), max(salaryB), max(salaryA) - max(salaryB) as difference
 from (
 select name, age, sum(salary) as salaryA, null as salaryB
 from tablea 
 group by name, age
 union all
 select name, age, null as salaryA, sum(salary) as salaryB
 from tableb 
 group by name, age) t
 group by name, age

答案 1 :(得分:0)

 SELECT A.name, A.age, A.SalaryA, B.SalaryB, A.SalaryA - B.SalaryB as difference
 FROM (
      SELECT name, age, SUM(Salary) as SalaryA
      FROM TableA
      GROUP BY name, age
      ) as A
INNER JOIN 
      (
      SELECT name, age, SUM(Salary) as SalaryB
      FROM TableB
      GROUP BY name, age 
      ) as B
 ON A.name = B.name
AND A.age  = B.age