在 MS Access 上返回行号

Posted

技术标签:

【中文标题】在 MS Access 上返回行号【英文标题】:Returning row number on MS Access 【发布时间】:2009-11-09 14:22:03 【问题描述】:

我有 4 个表,我通过选择查询中的连接从这些表中选择数据...我想要每个记录的序列号(行号),因为它们被提取。首先获取的记录应该是 1,接下来是 2,依此类推...

在 oracle 中,RowNum 等价。

【问题讨论】:

您是否考虑过在查询之外实现行号?如果我准确地了解您计划在应用程序中使用行号的目的,我可能会提供许多可能性。添加一些细节,我会回答最合适的。 【参考方案1】:

Brettski 的答案是 ASP 风格的,需要大量编辑。

SELECT DCOUNT("YourField","YourTable","YourField <= '" & [counter] & "'") 
  AS RowNumber,  
  YourField as counter FROM YourTable;  

以上是您的基本语法。您可能会发现这运行非常缓慢。我的典型解决方案是带有自动编号字段的存储桶表。这看起来很笨拙,但它给了我控制权,可能在这种情况下它允许速度。

【讨论】:

“带有自动编号字段的bucket table”与JohnFX早些时候所说的一致......【参考方案2】:

在 Access 中使用排序的 Make Table 查询,我使用以下内容(如果您查看查询将不起作用,因为如果您不希望它会增加数字)....

setRowNumber 'resetting increment before running SQL
DoCmd.RunSQL ... , rowNumber([Any Field]) AS ROW, ...

'Increment Number: Used to create temporary sorted Table for export
Private ROWNUM As Long

'dummyField: must take an input to update in Query
Public Function rowNumber(ByVal dummyField As Variant, Optional ByVal incBy As Integer = 1) As Long
    ROWNUM = ROWNUM + incBy 'increments before value is returned
    rowNumber = ROWNUM
End Function

Public Function setRowNumber(Optional ByVal setTo As Long = 0) As Long
    ROWNUM = setTo
    setRowNumber = ROWNUM
End Function

【讨论】:

【参考方案3】:

附下表

SET NOCOUNT ON 

CREATE TABLE people 
( 
    firstName VARCHAR(32), 
    lastName VARCHAR(32) 
) 
GO 

INSERT people VALUES('Aaron', 'Bertrand') 
INSERT people VALUES('Andy', 'Roddick') 
INSERT people VALUES('Steve', 'Yzerman') 
INSERT people VALUES('Steve', 'Vai') 
INSERT people VALUES('Joe', 'Schmoe')

您可以使用子查询来创建计数行:

SELECT 
    rank = COUNT(*), 
    a.firstName, 
    a.lastName 
FROM 
    people a  
    INNER JOIN people b 
    ON  
        a.lastname > b.lastname 
        OR 
        ( 
            a.lastName = b.lastName 
            AND 
            a.firstName >= b.firstName 
        ) 
GROUP BY 
    a.firstName, 
    a.lastName 
ORDER BY 
    rank

这种方法的问题是,如果您的结果集中有重复项,计数将被取消。

article 很好地解释了如何在查询中添加行计数列。

【讨论】:

您的脚本是否在 Access 中运行? 这似乎是 MSSQL 脚本,而不是 MS Access 查询

以上是关于在 MS Access 上返回行号的主要内容,如果未能解决你的问题,请参考以下文章

.ImportXML命令在MS Access中出错

SQL Server 在链接的 MS Access 表上插入后返回不同的记录

MS Access Query 根据本地数据还是网络数据返回不同的结果

选项卡式控件上的 MS Access 2007 引用子窗体控件返回 null

MS Access 组合框使用两个主键设置记录

MS-Access 中的 SQL:使用 COUNT、JOIN 并返回 0