这里有几个其他的想法。两者都有其缺点。它们都涉及使用常规查询。
第一个想法:调用 VBA 函数来跟踪总数。
缺点是您必须通过 SomeID 订购您的桌子。
此外,仅当函数获得不同的 SomeID 时,即使它是不同的查询,运行总数也会自行重置。这意味着第一条记录上 SomeID 的值必须不同于上一个查询的最后一条记录。
SELECT SomeTable.SomeId, SomeTable.SomeInput, MyRunningTotal([SomeID],[SomeInput]) AS SubTotal
FROM SomeTable
ORDER BY SomeTable.SomeId;
Function MyRunningTotal(SomeID As Long, SomeInput As Long) As Long
Static LastSomeID As Long
Static RunningTotal As Long
If SomeID <> LastSomeID Then
RunningTotal = 0
LastSomeID = SomeID
End If
RunningTotal = RunningTotal + SomeInput
MyRunningTotal = RunningTotal
End Function
第二个想法:使用 Dsum。这基本上是查询中的查询。
缺点是对于大型记录集,它可能非常慢。这是因为它必须为每条记录运行单独的查询。
此外,您必须添加一个自动增量字段(在其 ID 下面的示例代码中)。
SELECT SomeTable.ID, SomeTable.SomeId, SomeTable.SomeInput,
DSum("SomeInput","SomeTable","[SomeID]=" & [SomeID] & " and [ID]<=" & [ID]) AS SubTotal
FROM SomeTable;