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

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

在 oracle 中,RowNum 等价。

【问题讨论】:

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

标签: ms-access ms-access-2003


【解决方案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 查询
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多