如何在Access中的查询中添加基于排序值的序列号



我有一个查询,它返回一些值(att1(。我也想在它旁边有代表att1排序顺序的值。类似这样的东西:

att1   att2
19     3
2      2
46     4
78     5
1      1

解决方案或正确的方法是什么?

假设表名为table1,下面应该会产生所需的结果:

select a.att1, (select count(*) from table1 b where b.att1 <= a.att1) as att2
from table1 a;

对于每条记录,查询计算小于或等于当前记录的记录数,然后将其输出为排序索引。

我写了一篇关于各种方法的文章:

Microsoft Access 中的顺序行

最简单的形式:

SELECT RowNumber(CStr([ID])) AS RowID, *, FROM SomeTable;

使用RowNumber函数:

' Builds consecutive row numbers in a select, append, or create query
' with the option of a initial automatic reset.
' Optionally, a grouping key can be passed to reset the row count
' for every group key.
'
' 2018-08-23. Gustav Brock, Cactus Data ApS, CPH.
'
Public Function RowNumber( _
ByVal Key As String, _
Optional ByVal GroupKey As String, _
Optional ByVal Reset As Boolean) _
As Long
' Uncommon character string to assemble GroupKey and Key as a compound key.
Const KeySeparator      As String = "¤§¤"
' Expected error codes to accept.
Const CannotAddKey      As Long = 457
Const CannotRemoveKey   As Long = 5
Static Keys             As New Collection
Static GroupKeys        As New Collection
Dim Count               As Long
Dim CompoundKey         As String
On Error GoTo Err_RowNumber
If Reset = True Then
' Erase the collection of keys and group key counts.
Set Keys = Nothing
Set GroupKeys = Nothing
Else
' Create a compound key to uniquely identify GroupKey and its Key.
' Note: If GroupKey is not used, only one element will be added.
CompoundKey = GroupKey & KeySeparator & Key
Count = Keys(CompoundKey)
If Count = 0 Then
' This record has not been enumerated.
'
' Will either fail if the group key is new, leaving Count as zero,
' or retrieve the count of already enumerated records with this group key.
Count = GroupKeys(GroupKey) + 1
If Count > 0 Then
' The group key has been recorded.
' Remove it to allow it to be recreated holding the new count.
GroupKeys.Remove (GroupKey)
Else
' This record is the first having this group key.
' Thus, the count is 1.
Count = 1
End If
' (Re)create the group key item with the value of the count of keys.
GroupKeys.Add Count, GroupKey
End If
' Add the key and its enumeration.
' This will be:
'   Using no group key: Relative to the full recordset.
'   Using a group key:  Relative to the group key.
' Will fail if the key already has been created.
Keys.Add Count, CompoundKey
End If
' Return the key value as this is the row counter.
RowNumber = Count
Exit_RowNumber:
Exit Function
Err_RowNumber:
Select Case Err
Case CannotAddKey
' Key is present, thus cannot be added again.
Resume Next
Case CannotRemoveKey
' GroupKey is not present, thus cannot be removed.
Resume Next
Case Else
' Some other error. Ignore.
Resume Exit_RowNumber
End Select
End Function

所有代码也在GitHub:VBA.RowNumbers 上

最新更新