Oracle 11g SQL Sum函数

时间:2013-03-05 23:46:03

标签: sql oracle oracle11g

我有两个表一个名为Bank_Account的另一个Transaction_history结构是这样的:

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 个答案:

答案 0 :(得分:1)

做出以下假设

  • VALUE中的TRANSACTION_HISTORY列对于存款为正,对于撤回为负
  • 您希望将TRANSACTION_HISTORY中的所有行应用到当前余额BANK_ACCOUNT
  • 并非BankID表中存在的每个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 )