如何为现有Access查询添加行数字段?无需ID字段的简便方法
无需依赖ID字段为Access查询添加行号的方法
当然有办法实现!不用依赖ID字段也能给你的Select * from myQuery查询添加行号,下面分享几种实用的方案,你可以根据自己的场景选择:
方案1:使用DCount函数(基于可排序字段)
如果你的myQuery里存在可以用来排序的字段(比如日期、文本、数值字段),可以用DCount函数统计当前记录之前的记录数来生成行号。
举个例子,假设myQuery里有一个名为CreateDate的日期字段用来排序,SQL语句可以写成:
SELECT DCount("*", "myQuery", "CreateDate <= #" & [CreateDate] & "#") AS RowNumber, myQuery.* FROM myQuery ORDER BY CreateDate;
- 如果是文本字段,把
#换成单引号:"TextField <= '" & [TextField] & "'" - 如果是数值字段,直接写:
"NumberField <= " & [NumberField] - 如果存在重复值导致行号重复,可以结合多个字段来唯一区分记录,比如:
DCount("*", "myQuery", "CreateDate <= #" & [CreateDate] & "# AND Title <= '" & [Title] & "'") AS RowNumber
方案2:使用自连接查询
通过自连接的方式,统计每条记录之前的记录数量来生成行号,同样可以不依赖ID字段,只要你能指定排序的字段组合:
SELECT (SELECT COUNT(*) FROM myQuery AS q2 WHERE q2.CreateDate <= q1.CreateDate AND q2.Title <= q1.Title) AS RowNumber, q1.* FROM myQuery AS q1 ORDER BY RowNumber;
这种方式的核心是通过子查询对比当前记录(q1)和其他所有记录(q2),统计符合“在当前记录之前”条件的数量,以此作为行号。
注意事项
- 行号的顺序依赖于你指定的排序字段,如果没有任何可排序的字段,生成的行号顺序是不稳定的(Access会按默认的存储顺序返回,可能每次查询结果不同)。
- 如果你的查询结果有大量记录,
DCount和自连接的方式可能会有性能问题,这种情况下可以考虑先将查询结果导入临时表,再给临时表添加自动编号字段作为行号。
内容的提问来源于stack exchange,提问作者Herbal Derp
相关产品推荐
相关产品推荐

