访问从以前的记录中获取值

时间:2017-03-06 15:32:08

标签: ms-access

我有一个带有以下

的Access查询
GL_A.Account, 
GL_P.FiscalYear, 
GL_P.FiscalPeriod, 
GL_P.BeginningBalance, 
GL_P.DebitAmount, 
GL_P.CreditAmount, 
[BeginningBalance]+([DebitAmount]-[CreditAmount]) AS EndingBalance

问题是BeginningBalance只有1月的值(FiscalPeriod 1)。

我需要有一个新字段ActualBeginngBal来自上个月EndingBalance(1月除外)

enter image description here

注意:有许多帐户#' s但每个帐户每个FiscalPeriod / FiscalYear只有1条记录

非常感谢您的帮助 谢谢

4 个答案:

答案 0 :(得分:0)

看看这是否有帮助。将表的第二个副本放在查询中,加入Account和FiscalYear上的第一个副本,但不加入FiscalPeriod。然后可以从表的第二个副本计算ActualBeginningBalance,并使用约束来仅选择FiscalPeriod<第一张表中的FiscalPeriod。注意 - 您可能会获得1月的空结果,您可能需要将其转换为0。

好的,它有点复杂 - 我最终使用了与其他响应类似的子查询,但计算了EB而不是试图从表中提取它

SELECT Ledger.Account, Ledger.FiscalYear, Ledger.FiscalPeriod, 
[BeginningBalance]+
       IIf([FiscalPeriod]<>"01",
             (select sum(T.BeginningBalance+T.DebitAmount-T.CreditAmount) 
             from Ledger T 
              where T.account=Ledger.account and T.FiscalYear=Ledger.FiscalYear and T.FiscalPeriod<Ledger.FiscalPeriod)
        ,0) 
       AS ActualBeginningBalance, 
Ledger.DebitAmount AS DebitAmount, 
Ledger.CreditAmount AS CreditAmount, 
[ActualBeginningBalance]+[DebitAmount]-[CreditAmount] AS EndingBalance
FROM Ledger;

答案 1 :(得分:0)

这个SQL完成工作并返回下面的表格(带有我的测试数据):
enter image description here

SELECT    T1.Account
        , T1.FiscalYear
        , T1.FiscalPeriod
        , T1.ActualBeginngBal
        , (
           SELECT TOP 1 T2.EndingBalance
           FROM   Table1 T2
           WHERE CLNG(T2.FiscalYear & Format(T2.FiscalPeriod,"00")) <
                 CLNG(T1.FiscalYear & Format(T1.FiscalPeriod,"00")) AND
                 T2.Account = T1.Account
           ORDER BY CLNG(T2.FiscalYear & Format(T2.FiscalPeriod,"00")) DESC
           ) AS BeginningBalance
        , T1.EndingBalance
FROM    Table1 T1

答案 2 :(得分:0)

如果在主表中使用BeginningBalance,它将更好。因为只有一条记录属于一个帐户。这是一对一的关系。

答案 3 :(得分:0)

如何移动到上一条记录,获取值并返回到原始记录。

例如:

Private Sub txtXYZ1_AfterUpdate()

    Dim tmpXYZ As Single
    DoCmd.GoToRecord , , acPrevious
    tmpXYZ = txtXYZ1
    DoCmd.GoToRecord , , acNext
    txtPriorXYZ = tmpXYZ
    txtXYZChange = txtXYZ1 - txtPriorXYZ

End Sub