基于前一行更新行以提供运行总计

时间:2014-01-05 17:55:48

标签: ms-access

我在Microsoft访问中拥有Customer表,数据如下:

CustID  Debit   Credit  Balance
1       0       3000    -3000
1       3000    0       0
1       0       200     200
2       0       300     500
3       0       400     900
1       500     0       400

我需要的是重新计算余额列,如果根据等式(balance = previousbalance + credit-debit)在借记或贷记中发生任何更新,则这是针对给定的客户ID完成的。 我搜索并发现没有像sql那样的超前和滞后。

1 个答案:

答案 0 :(得分:0)

假设您有一个名为[Transactions]的表格,其中包含您的示例数据和一个名为[ID]的AutoNumber字段:

ID  CustID  Debit  Credit  Balance
--  ------  -----  ------  -------
 1       1      0    3000    -3000
 2       1   3000       0        0
 3       1      0     200      200
 4       2      0     300      500
 5       3      0     400      900
 6       1    500       0      400

[ID]小于或等于当前[ID]的[CustID],每行的新[Balance]为SUM(Credit) - SUM(Debit)。因此,实现这一目标的一种方法是使用像这样的UPDATE查询

UPDATE Transactions
SET [Balance] = 
        DSum("Credit", "Transactions", "CustID=" & [CustID] & " AND ID<=" & [ID])
            - DSum("Debit", "Transactions", "CustID=" & [CustID] & " AND ID<=" & [ID])

运行该查询后,我们的[Balance]数字如下所示:

ID  CustID  Debit  Credit  Balance
--  ------  -----  ------  -------
 1       1      0    3000     3000
 2       1   3000       0        0
 3       1      0     200      200
 4       2      0     300      300
 5       3      0     400      400
 6       1    500       0     -300