ms-access - 为排序的 MS Access 查询中的记录分配排名/索引

标签 ms-access vba

我有一个 MS Access 查询,我正在使用出于保密原因无法输出的数据进行排序,但是,我需要在输出中包含排名或索引,以便可以保持排序顺序。

目前,我的方法大致如下:

Dim cdb As DAO.Database
Dim rst As DAO.Recordset
Dim dst As DAO.Recordset
Dim idx As Long

Set cdb = CurrentDb
Set rst = cdb.OpenRecordset("SELECT Field1, Field2, Field3, Field4, Field5 FROM MyTable ORDER BY Field6")
Set dst = cdb.OpenRecordset("MyOutputTable")
idx = 1

If Not rst.EOF Then
    rst.MoveFirst
    Do Until rst.EOF
        dst.AddNew
        dst!Field1 = rst!Field1
        dst!Field2 = rst!Field2
        dst!Field3 = rst!Field3
        dst!Field4 = rst!Field4
        dst!Field5 = rst!Field5
        dst!Rank = idx
        dst.Update
        idx = 1 + idx
        rst.MoveNext
    Loop
End If
dst.Close
rst.Close

Set dst = Nothing
Set rst = Nothing
Set cdb = Nothing

但是:

  • 这需要创建一个带有预先存在的“排名”字段的输出表来容纳结果。

  • Do 循环中填充输出表中每个单独字段的值非常繁琐...必须有更好的方法!

因此,我的问题是是否可以仅使用查询而不使用普通的 VBA 来获得此结果?

提前非常感谢您的时间和帮助。

最佳答案

是的,您可以使用子查询来使用查询来实现此结果:

SELECT Field1, Field2, Field3, Field4, Field5, 
(
SELECT Count(s.Field6)
FROM MyTable s
WHERE s.Field6 <= t.Field6
) As Rank
FROM MyTable t
ORDER BY Field6

请注意,这将对性能产生重大影响,因为需要对每一行重新运行子查询。

另请注意,对于 Field6 值相等的行,它们的排名将相等,而 VBA 代码的排名不相等。

关于ms-access - 为排序的 MS Access 查询中的记录分配排名/索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48571706/

相关文章:

regex - Excel VBA 正则表达式 : Format cell to Bold if starts with three spaces

python - 如何在Excel上按下按钮时执行Python脚本

sql - access 2010 如何检查是/否字段是否被选中

ms-access - 如何在添加记录中打开表单

c# - 从 Access 数据库收集数据

excel - 通过键盘输入激活 SelectionChange 上的单元格范围

excel - 将 csv 文件导入 Excel 非事件工作表的宏

c# - 小数列,并发冲突 : the UpdateCommand affected 0 of the expected 1 records

SQL - 比较 WHERE 语句中的日期在 Access DB 中无法正常工作

excel - 加载项无法通过自定义 UI 运行