![](/img/trans.png)
[英]SQL query multiplying SUM results when joining to multiple transaction tables
[英]SQL Server SQL multiplying Sum results when join multiple tables
如果有人可以帮助我,我将不胜感激。
我正在尝试从一个表中获取结果,在该表中我使用sum()函数并连接了另外两个表。 我的结果在总和列上成倍增加。 这是我的桌子看起来和我想要的结果
表格1
[Id] [Account_nbr] [date] [seq#]
------------------------------------------
[1234] [$60] [4321] [10-15-2012] [1]
[1234] [$20] [4321] [10-15-2012] [2]
[1234] [$30] [4321] [10-15-2012] [3]
[2345] [$40] [9876] [10-15-2012] [1]
[3456] [$50] [6543] [10-15-2012] [1]
表2
[ID] [cust_num]
---------------------
[1234] [8765]
[2345] [8766]
[3456] [8767]
表3
[cust_num] [account_nbr]
-------------------------------
[8765] [4321]
[8767] [9876]
我的期望的结果将被加入Table 1
, Table 2
使用ID
和加入Table 3
使用cust_num
和看到account_nbr
从table 1
与匹配account_number
在Table 3
,并且如果匹配,则发现
sum(Table1.Amount),Table1.Id,Table1.Account_nbr,Table1.Date
我正在使用这样的SQL查询,但总和结果却成倍增加
SELECT
sum((Table1.Amount), Table1.Id, Table1.Account_nbr, Table1.Date
FROM
table1, table2, table3
WHERE
table1.id = table2.id
AND table2.cust_num = table3.cust_num
AND table1.account_nbr = table3.account_nbr
GROUP BY
table1.id,table1.account_nbr,table1.date
ORDER BY
table1.date DESC
但是就像我之前说的,我的结果正在成倍增长。 我期望的结果以表格形式出现,如下所述
[Amount] [Id] [Account_nbr] [Date]
---------------------------------------------------
[$110] [1234] [4321] [10-15-2012]
[$40] [2345] [9876] [10-15-2012]
该id = 3456
不应该存在,因为相应的account_nbr
从table1
不存在于table3
。
好吧,这就是您所需要的。 我只是不明白您最终的成绩是怎么得到2345的,可能是拼写错误?
select
sum(T1.Amount) as Amount,
T1.Id,
T1.account_nbr,
T1.date
from table1 as T1
inner join table2 as T2 on T2.Id = T1.Id
inner join table3 as T3 on T3.cust_num = T2.cust_num and T3.account_nbr = T1.account_nbr
group by
T1.Id,
T1.account_nbr,
T1.date
如果table1.id=table2.id
或table2.cust_num=table3.cust_num
不是1:1关系,则将获得预期SUM的倍数。 这称为笛卡尔乘积。 table1.account_nbr=table3.account_nbr
有所缓解,但是您仍然可以使笛卡尔积产生。
SELECT sum(Amount) Amount, Id, Account_nbr, Date
FROM table1
WHERE EXISTS (
SELECT 1
FROM table2
JOIN table3 on table2.cust_num = table3.cust_num
WHERE table1.id = table2.id
AND table1.account_nbr = table3.account_nbr)
GROUP BY id, account_nbr, date
ORDER BY date DESC
上面的查询仅从表1中获得了相同的SUM,同时测试您可以一直在t1-t2,t2-t3和t3-t1之间找到匹配项。
我认为最好先计算总和,然后再进行所有其他运算。
SELECT T1.amount AS Amount,
T1.id,
T1.account_nbr,
T1.DATE
FROM (SELECT SUM(t1.amount) AS Amount,
t1.id,
t1.account_nbr,
t1.DATE
FROM table1
GROUP BY t1.id,
t1.account_nbr,
t1.DATE)AS T1
inner join table2 AS T2
ON T2.id = T1.id
inner join table3 AS T3
ON T3.cust_num = T2.cust_num
AND T3.account_nbr = T1.account_nbr'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.