查询两个表的总和乘积

query to Sum product of two tables

我有一个 2 tables 的名称和余额 ex

Table一个

  Name    | Amount
-----------------------                           
  Abraham | 500  
  Abraham | 100  
  George  | -200  
  George  | 200  
  Thomas  | 300  
  Thomas  | -100

Table B

  Name    | Amount
-------------------------                           
  Abraham | 100  
  Abraham | 200  
  George  | -200  
  George  | 50  
  Thomas  | 400  
  Thomas  | 300   
  Albert  | -100       
  Albert  | -200 

所以我需要把2个table加起来,每个名字都有正面和负面,我不知道Table A和table B是否相同数量的唯一名称或不是所以它可以是或。 当我 运行 查询

Select sum(Amount)  
from table_A  
group by Name  

此查询适用于 Table A 或 Table B,但是当我尝试 运行 这样的查询时,我得到了一个令人难以置信的数字

Select a.Name , sum(a.amount) + sum(b.amount)
from table_A full outer join table_B b on a.Name = b.Name
group by a.Name

有没有一种方法可以在一个查询中执行此操作?

在ORACLE中我会做

SELECT Name, sum(Amount) AS Amount FROM
  (SELECT Name, Amount
    FROM table_A  
UNION ALL
  SELECT Name, Amount
    FROM table_B  )
GROUP BY Name

尝试一下是否可以在 sybase 中做类似的事情。

从内联视图我会制作 "real" 视图。

如果我没有理解你的意图,我很抱歉。

要使用联接,您需要通过在单独的表达式中汇总每个 table 来避免当前遇到的笛卡尔积,例如下面显示的嵌套子查询:

SELECT aa.name, COALESCE(aa.amount,0) + COALESCE (bb.amount,0)
FROM ( 
      SELECT a.name, SUM(a.amount) AS amount 
      FROM TableA a GROUP BY a.name
 ) aa
FULL OUTER JOIN
(
      SELECT b.name, SUM(b.amount) AS amount 
      FROM TableB b GROUP BY b.name
 ) bb
ON aa.name = bb.name
;

我的查询使用 UNION ALL 工作正常。请参阅我的查询和下面的 SQL Fiddle 演示:

SELECT Name,SUM(Amount)Amount FROM(
SELECT Name, Amount
    FROM TableA
UNION ALL
SELECT Name, Amount
    FROM TableB) AS A GROUP BY Name

SQL FIDDLE DEMO HERE