2013-04-30 3 views
0

안녕하세요 저는 SQL 초보자이며 문제가 있습니다. SUM을 사용하여 SQL 다중 테이블 조인

내가 가지고있는 다음과 같은 5 표 :

지점 (이름, 도시), 직원 (EMPNO, 이름, 지점), 고객 (의 CustNo, 이름, EMPNO), AccountDetails (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를 선택하십시오.) 그러나 아무 소용이 없어도 여전히 두 배가됩니다.

계정 테이블에 지점 속성을 넣었지만 가능한 경우 그렇게하지 않으려합니다.

도움을 주시면 대단히 감사하겠습니다.

감사합니다.

+0

왜 고객, 계좌 세부 정보 및 은행 계좌 직원에게 정확히 합류하고 있습니까? 당신은 그들로부터 기둥을 사용하지 않는 것 같습니다. – Aushin

+1

그리고 여러 고객이 다른 지점에 직원이있는 계정을 공유하는 경우 어떻게해야합니까? 데이터 모델에는 몇 가지 문제점이 있습니다. 특히, 고객이 은행 직원에게 직접 부착되는 것이 이상하게 보입니다. –

+0

@Aushin이 무슨 뜻인지 자세히 설명해 주시겠습니까? 고마워요 – monster

답변

1

시도해보십시오. 하위 쿼리를 사용하여 각 계정에 대해 하나의 고객 정보 만 가져옵니다. 이상적은 아니지만 db 구조를 기반으로 작동해야합니다.

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 
+0

+1. . . 특히이 솔루션이 마음에 들지는 않지만이 데이터 모델을 사용하는 것이 가장 좋습니다. –

+0

@jle 최대한 빨리 시도해 보겠습니다. 감사합니다! – monster

+0

@jle 다른 스타일의 구문을 사용하므로 정확하게 변환 할 수 없었습니다. max (b.custno)의 이유를 설명 할 수 있습니까? 감사합니다 – monster