如何在 Access 查询中显示行号,如 SQL 中的 ROW_NUMBER

Posted

技术标签:

【中文标题】如何在 Access 查询中显示行号,如 SQL 中的 ROW_NUMBER【英文标题】:How to show row number in Access query like ROW_NUMBER in SQL 【发布时间】:2013-01-18 22:41:00 【问题描述】:

我在 Microsoft Access 中有一个表,我想在 Access 中使用选择查询在列中显示行号,就像在 SQL Server 中使用 ROW_NUMBER() 函数一样。

在 SQL Server 中,我可以使用这个查询:

SELECT ROW_NUMBER() OVER (ORDER BY tblUser.UserID) AS NoRow, * 
FROM tblUser

我在访问中使用相同的查询,但出现错误。

你能帮帮我吗?

【问题讨论】:

这里有几个Ways To Do Sequential Numbering in Access 【参考方案1】:

你可以试试这个查询:

Select A.*, (select count(*) from Table1 where A.ID>=ID) as RowNo
from Table1 as A
order by A.ID

【讨论】:

我的列数据类型为任意类型且无编号且无唯一性。我可以解析 row_index 吗? 它可以工作,但是对于具有大约 30K 记录和 mdb 文件大小 60 MB 的大表,它无法完成。【参考方案2】:

使用 MS Access 执行此操作的一种方法是使用子查询,但它没有任何类似的功能:

SELECT a.ID, 
       a.AText, 
       (SELECT Count(ID) 
        FROM table1 b WHERE b.ID <= a.ID 
        AND b.AText Like "*a*") AS RowNo
FROM Table1 AS a
WHERE a.AText Like "*a*"
ORDER BY a.ID;

【讨论】:

我不明白 where 条件 (AND b.AText Like "a") 和 (a.AText Like "a") 这只是为了表明您在外部查询中需要的任何 WHERE 语句也必须复制到内部查询中。【参考方案3】:

通过VB函数:

Dim m_RowNr(3) as Variant
'
Function RowNr(ByVal strQName As String, ByVal vUniqValue) As Long
' m_RowNr(3)
' 0 - Nr
' 1 - Query Name
' 2 - last date_time
' 3 - UniqValue

If Not m_RowNr(1) = strQName Then
  m_RowNr(0) = 1
  m_RowNr(1) = strQName
ElseIf DateDiff("s", m_RowNr(2), Now) > 9 Then
  m_RowNr(0) = 1
ElseIf Not m_RowNr(3) = vUniqValue Then
  m_RowNr(0) = m_RowNr(0) + 1
End If

m_RowNr(2) = Now
m_RowNr(3) = vUniqValue
RowNr = m_RowNr(0)

End Function

用法(无排序选项):

SELECT RowNr('title_of_query_or_any_unique_text',A.id) as Nr,A.*
From table A
Order By A.id

如果需要排序或多个表连接,则创建中间表:

 SELECT RowNr('title_of_query_or_any_unique_text',A.id) as Nr,A.*
 INTO table_with_Nr
 From table A
 Order By A.id

【讨论】:

以上是关于如何在 Access 查询中显示行号,如 SQL 中的 ROW_NUMBER的主要内容,如果未能解决你的问题,请参考以下文章

在 MS Access 上返回行号

在DELPHI中如何在dbgrid 显示查询数据

我的access数据库里面sql语句在服务器上不能正常运行?

excel中如何进行语句查询

如何在 Excel 中显示来自 Access 的二维数组记录集?

plsql developer中如何设置sql window显示行号