SQL多表连接SUM

时间:2013-04-30 13:32:05

标签: sql join sum

嗨,我是SQL的初学者,遇到了问题。

我有以下5个表:

分支(姓名,城市), 员工(EmpNo,姓名,分支机构), 客户(CustNo,Name,EmpNo), 帐户详细信息(AccNo,CustNo), 帐户(AccNo,余额)

员工通过Employee Branch属性加入单个分支。 客户通过EmpNo属性加入单个Employee。

每个客户可以有多个帐户,每个帐户可以有多个客户(因此允许共享帐户) - 因此我创建了一个交叉实体(AccountDetails)。

我想要记录每个分支的总余额 - 我得到的问题是我的总数是重复计算,即尽可能多的客户可以共享一个帐户我的代码将计算每个客户帐户,即使它指的是相同的AccNo - 因此AccNo和随附的余额会反复计算,具体取决于共享帐户的客户数量,因此,如果2个客户共享一个帐户,则余额将被计算两次。

select sum(a.balance), a.accno, b.name
from branch b, bankemployee e, customer c, accountdetails d, account a
where b.name = e.branch
and e.empno = c.empno
and c.custno = d.custno
and d.accno = a.accno
group by a.accno, b.name

我使用过DISTINCT,例如d.accno IN(从accountDetails中选择不同的accno)但无济于事,它仍然是重复计算。

我在Account表中放置了一个Branch属性,但如果可能的话,我不希望这样做。

非常感谢任何帮助。

谢谢。

1 个答案:

答案 0 :(得分:1)

试试这个。它使用子查询来获取每个帐户的一个客户信息。这不是理想的,但根据您的数据库结构,它应该工作:

select sum(accts.balance), accts.accno, b.name
from branch b inner join bankemployee e on b.name = e.branch
inner join customer c on e.empno = c.empno
inner join (select a.accno, a.balance, max(b.custno) as custMax from account as a
inner join accountdetails as b on a.accno=b.accno
 group by a.accno,a.balance) as accts on c.custno=accts.custMax
group by accts.accno, b.name