我有一个 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/