查询两个表的Sum积

时间:2015-02-18 05:16:04

标签: sql database sybase-iq

我有2个表格,其名称和余额为

表A

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

表B

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

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

Select sum(Amount)  
from table_A  
group by Name  

此查询分别适用于表A或表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

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

3 个答案:

答案 0 :(得分:1)

我的查询使用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

答案 1 :(得分:0)

在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中执行类似操作。

从内联视图中我会做出“真正的”观点。

如果我不明白你的意图,我很抱歉。

答案 2 :(得分:0)

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

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
;