2013-03-05 4 views
-1

내가 가지고있는 두 테이블 구조 다른 Transaction_history BANK_ACCOUNT라는 사람이 이렇게 있습니다 :오라클 11g SQL 합계 기능

나는 은행 계좌의 잔액에 거래 값을 추가 할 필요가
Bank_Account 
------------ 
BankID 
Balance 

Transaction_history 
------------ 
TransID 
BankID 
Value 

그러나이있을 수 있습니다 Transaction_History에서 각 계정에 대해 둘 이상의 거래를 수행합니다 (예를 들어 누군가 1000 달러를 입금 한 다음 테이블에서 $ 500을 인출 할 수 있습니다). $ 500가 올바른 계좌 잔고에서 취해 지도록 코드를 작성하는 방법은 무엇입니까? 나는 시도하고 명확하게하는 예를 제시했다.

Account 1 has a balance of $5000 
Account 1 has $1000 deposited 
Account 1 has $500 withdrawn 
Account 1 current balance is $5500 

현재 코드는 새로운 잔고에서 인출을 취하지 않지만 원본을 사용합니다. 사전에

감사합니다.

답변

1

다음과 같은 가정

  • TRANSACTION_HISTORYVALUE 열이 withdrawls에 대한 예금에 대한 긍정적 및 부정적 만들기
  • 당신은 BANK_ACCOUNT
  • 의 현재 잔액 아니 모든 BankIDTRANSACTION_HISTORY에서 모든 행을 적용 할 BANK_ACCOUNT 테이블에있는 테이블은 TRANSACTION_HISTORY 테이블에 트랜잭션이 있습니다.

그러면 상관 된 하위 쿼리가 필요합니다.

UPDATE bank_account acct 
    SET balance = balance + (SELECT SUM(th.value) 
           FROM transaction_history th 
          WHERE th.bankID = acct.bankID) 
WHERE EXISTS(SELECT 1 
       FROM transaction_history th 
       WHERE th.bankID = acct.bankID) 
+0

안녕 같은 뭔가 일을하고 난 분명하지 않았다 내 테이블하지만 내 사과를 업데이트하는 환상적인 이잖아 사용 방법 (스크립트 출력 대화 상자에서) 바로 출력 올바른 값 - 사실에있는 데이터를 업데이트하지 않고 데이터베이스 (마치 보고서 인 것처럼) – Hulaz