1

我有 2 个表,其中包含名称和余额 ex

表 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 

所以我需要把这两个表加起来,每个名字都有一个正面和一个负面,我不知道表 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

有没有办法在一个查询中做到这一点?

4

3 回答 3

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 演示在这里

于 2015-02-18T05:57:48.187 回答
0

在甲骨文我会做

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 中做类似的事情。

从在线视图中,我将制作“真实”视图。

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

于 2015-02-18T05:23:39.407 回答
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
;
于 2015-02-18T05:32:58.833 回答