You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Access查询中根据Ins/Outs值实现加减计算生成新列的方法

Access查询实现Ins/Outs滚动累计的操作方法

前置要求:查询数据源必须包含一个可唯一确定记录顺序的排序字段(如自增主键ID、操作时间戳),无排序依据的累计计数逻辑不成立。以下示例默认使用自增ID字段ID作为排序键,存储Ins/Outs的字段名为操作类型(即你提到的A列),可根据实际情况替换。

方法1:使用内置DSum函数(无需编写代码)

适合数据量较小(千条以内)的场景,直接在查询中新增计算列即可:

  • 打开查询设计视图,在空白列的「字段」行输入如下表达式:
    累计值: DSum("IIf([操作类型]='Ins',1,-1)","你的数据源名称","ID<=" & [ID])
    
  • 将表达式中你的数据源名称替换为当前查询的源表/源查询的实际名称,操作类型、ID替换为对应字段的真实名称
  • 保存查询后切换到数据表视图,即可看到生成的累计值列

方法2:使用VBA自定义函数(性能更优)

适合数据量较大的场景,查询速度远快于DSum方案:

  • 按Alt+F11打开VBA编辑器,右键点击当前数据库名称,选择「插入」-「模块」
  • 在新建的模块中输入如下代码:
    Public runTotal As Long
    Public lastSortVal As Long
    
    Function GetRunningTotal(curSortVal As Long, opType As String) As Long
        ' 查询重跑时自动重置缓存
        If curSortVal < lastSortVal Then
            runTotal = 0
            lastSortVal = 0
        End If
        ' 根据操作类型增减累计值
        If opType = "Ins" Then
            runTotal = runTotal + 1
        ElseIf opType = "Outs" Then
            runTotal = runTotal - 1
        End If
        lastSortVal = curSortVal
        GetRunningTotal = runTotal
    End Function
    
  • 保存模块后回到查询设计视图,在空白列的「字段」行输入如下表达式:
    累计值: GetRunningTotal([ID],[操作类型])
    
  • 确保查询按排序字段(即示例中的ID)升序排列,保存后运行即可得到累计值

注意:如果使用时间字段作为排序依据,建议增加ID作为第二排序字段,避免相同时间的记录累计顺序异常。

内容的提问来源于stack exchange,提问作者Alex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 00:57:01