运行 基于有时需要追溯日期的日期的总数
Running Total based on dates when retroactive dates are sometimes necessary
因此,我尝试在 Microsoft Access 2010 中创建一个基于日期的总计 运行 的查询。让我们通过假设查询基于名为 tblT1 的 table 金融交易进行简化,其中三个字段按日期排序:
- ID
- TDa
- 数量
目标:创建财务分类帐。
我可以通过使用
在查询中创建这个 运行 总数
DSUM("Amount", "tblT1", "TDate<=#" & TDate &"#")
这样做的问题是,如果有多笔交易的日期相同,则匹配的日期都将显示相同的 运行 总数。 运行 总数仅针对日期的每次更改进行更新,而不是针对每笔交易进行更新。
解决此问题的一种方法是将 DSUM 标准基于 ID 而不是 TDate。但这对我不起作用,因为有时我需要追溯输入日期,这意味着我最终得到的旧交易的 ID 号高于其后的交易。由于我按日期排序,因此排除了 ID 字段作为选项。是否有创建逐行更新的 运行 总数的解决方法?
试试这个逻辑:
DSUM("Amount",
"tblT1",
"(TDate < #" & TDate & "#) OR (TDate = #" & TDate &"# AND ID <= " & ID)"
)
如果您将此作为查询来执行,则如下所示:
select t.*,
(select sum(t2.amount)
from transactions as t2
where t2.tdA = t.tdA and -- not sure if this is necessary
(t2.date < t.date or
t2.date = t.date and t2.id <= t.id
)
) as running_amount
from transactions as t;
我终于解决了。解决方案是基于现有 table 创建一个查询(称之为 "Query1"),并根据交易日期和现有 ID(主键)包含一个新的复合 ID(名为 NewID) ).然后,我基于 Query1 创建了第二个查询 (Query2),并将此 NewID 用作 DSUM 函数中的条件。但是,请注意几点:确保日期格式为 YYYYMMDD,以便所有日期都具有相同的数字位数,并按时间顺序排序。当您将现有 ID 添加到新日期编号时,还可以将现有 ID 格式化为您认为必要的数字(我选择了 6)。最后,您需要将所有这些包含在一个 Val() 函数中。否则,它将在查询中显示为文本,并且可能无法在 DSUM 函数中正常运行。
所以,这是查询 2 中的函数:DSUM("Amount", "tblT1", "NewID<="&NewID)
因此,我尝试在 Microsoft Access 2010 中创建一个基于日期的总计 运行 的查询。让我们通过假设查询基于名为 tblT1 的 table 金融交易进行简化,其中三个字段按日期排序:
- ID
- TDa
- 数量
目标:创建财务分类帐。
我可以通过使用
在查询中创建这个 运行 总数DSUM("Amount", "tblT1", "TDate<=#" & TDate &"#")
这样做的问题是,如果有多笔交易的日期相同,则匹配的日期都将显示相同的 运行 总数。 运行 总数仅针对日期的每次更改进行更新,而不是针对每笔交易进行更新。
解决此问题的一种方法是将 DSUM 标准基于 ID 而不是 TDate。但这对我不起作用,因为有时我需要追溯输入日期,这意味着我最终得到的旧交易的 ID 号高于其后的交易。由于我按日期排序,因此排除了 ID 字段作为选项。是否有创建逐行更新的 运行 总数的解决方法?
试试这个逻辑:
DSUM("Amount",
"tblT1",
"(TDate < #" & TDate & "#) OR (TDate = #" & TDate &"# AND ID <= " & ID)"
)
如果您将此作为查询来执行,则如下所示:
select t.*,
(select sum(t2.amount)
from transactions as t2
where t2.tdA = t.tdA and -- not sure if this is necessary
(t2.date < t.date or
t2.date = t.date and t2.id <= t.id
)
) as running_amount
from transactions as t;
我终于解决了。解决方案是基于现有 table 创建一个查询(称之为 "Query1"),并根据交易日期和现有 ID(主键)包含一个新的复合 ID(名为 NewID) ).然后,我基于 Query1 创建了第二个查询 (Query2),并将此 NewID 用作 DSUM 函数中的条件。但是,请注意几点:确保日期格式为 YYYYMMDD,以便所有日期都具有相同的数字位数,并按时间顺序排序。当您将现有 ID 添加到新日期编号时,还可以将现有 ID 格式化为您认为必要的数字(我选择了 6)。最后,您需要将所有这些包含在一个 Val() 函数中。否则,它将在查询中显示为文本,并且可能无法在 DSUM 函数中正常运行。 所以,这是查询 2 中的函数:DSUM("Amount", "tblT1", "NewID<="&NewID)