我有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
有一种方法可以在一个查询中执行此操作吗?
答案 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
;