0

こんにちは、私は SQL の初心者で、問題があります。

次の5つのテーブルがあります。

支店(名前、都市)、 従業員(EmpNo、名前、支店)、 顧客(CustNo、名前、EmpNo)、 AccountDetails (AccNo、CustNo)、 アカウント(AccNo、残高)

従業員は、Employee Branch 属性を介して 1 つの Branch に結合されます。顧客は、EmpNo 属性を介して 1 人の従業員に結合されます。

各顧客は多くのアカウントを持つことができ、各アカウントは複数の顧客を持つことができます (したがって、共有アカウントが許可されます) - したがって、交差エンティティ (AccountDetails) を作成しました。

各ブランチの合計残高を合計したい - 問題は、合計が二重にカウントされることです。つまり、多くの顧客がアカウントを共有できるため、コードは同じ AccNo を参照しているにもかかわらず、各顧客アカウントをカウントします。アカウントを共有している顧客の数に応じて、AccNo とそれに付随する残高が何度もカウントされるため、2 人の顧客がアカウントを共有している場合、残高は 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 egdaccno IN (accountDetails から個別の accno を選択) を使用しましたが、役に立たず、まだ二重にカウントされます。

Account テーブルに Branch 属性を配置しましたが、できればそのようにしたくありません。

どんな助けでも大歓迎です。

ありがとうございました。

4

1 に答える 1

1

これを試して。サブクエリを使用して、アカウントごとに 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
于 2013-04-30T13:46:40.227 に答える