查询两个表的总和乘积
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
我有一个 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