在 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 上返回行号的主要内容,如果未能解决你的问题,请参考以下文章
SQL Server 在链接的 MS Access 表上插入后返回不同的记录
MS Access Query 根据本地数据还是网络数据返回不同的结果