You need to enable JavaScript to run this app. 如何在Access查询中为BOM物料的关联部件生成分组重置的ItemNo编号
优惠活动
大模型
产品
解决方案
定价
更多

如何在Access查询中为BOM物料的关联部件生成分组重置的ItemNo编号

Access BOM清单生成分组序号(ItemNo)操作指南

新手优先方案:子查询法(无需写VBA)

这个方法不用额外创建表或者写代码,直接修改现有查询的SQL语句即可:

  1. 打开你已经做好的包含Material和BOMPart字段的BOM查询
  2. 点击查询窗口右下角的SQL视图按钮,切换到SQL编辑模式
  3. 把原有SQL语句替换为以下内容,注意把语句里的你的现有BOM查询名替换成你自己实际保存的查询名称:
SELECT
  t1.Material,
  t1.BOMPart,
  (
    SELECT COUNT(*) FROM 你的现有BOM查询名 AS t2
    WHERE t2.Material = t1.Material AND t2.BOMPart <= t1.BOMPart
  ) AS ItemNo
FROM 你的现有BOM查询名 AS t1
ORDER BY t1.Material, t1.BOMPart;
  1. 切换回数据表视图,就能看到自动生成的ItemNo列,切换物料时序号会自动从1开始计数。

规则调整说明

如果你的部件不需要按BOMPart的字母/数字顺序排序,只要修改子查询里的t2.BOMPart <= t1.BOMPart条件,换成你要排序的对应字段比较规则即可。

大数据量备选方案:VBA法(运行速度更快)

如果你的BOM数据超过1万行,子查询运行速度会变慢,可以用临时表加VBA的方式实现:

  1. 先把现有BOM查询的结果生成一张临时表,额外添加一个数字类型的ItemNo字段
  2. 按下Alt+F11打开VBA编辑器,插入一个新模块,粘贴以下代码,替换掉里面的你的临时表名后运行即可:
Sub 生成BOM序号()
    Dim rs As Recordset
    Dim 当前物料号 As Long, 序号 As Integer
    Set rs = CurrentDb.OpenRecordset("SELECT * FROM 你的临时表名 ORDER BY Material, BOMPart")
    当前物料号 = -1
    序号 = 0
    Do While Not rs.EOF
        If rs!Material <> 当前物料号 Then
            当前物料号 = rs!Material
            序号 = 1
        Else
            序号 = 序号 + 1
        End If
        rs.Edit
        rs!ItemNo = 序号
        rs.Update
        rs.MoveNext
    Loop
    rs.Close
    Set rs = Nothing
End Sub

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 10:27:10