count id section
1 15 7
2 3 2
3 54 1
4 7 4
我该如何实现这个?
count id section
1 15 7
2 3 2
3 54 1
4 7 4
DSum("[New field with 1 in it]","[Table Name]","[ID field]<=" & [ID Field])
as counterthing
我不太明白你想要什么,但如果你只是想在表单上显示一个序列号,你可以使用绑定到表单的CurrentRecord属性的控件。一个带有ControlSource =CurrentRecord
的控件将具有始终准确的“记录号”,这些记录号是按顺序排列的,并且当表单的Recordsource更改时会更新(这可能是需要的或不需要的)。
然后,您可以使用该编号在表单中导航,如果需要的话。
但这可能与您所寻找的完全不同 - 我无法从您发布的问题和评论中的“澄清”中得出结论。
APPEND
一个空列,可以在前端代码中填充 ;) - onedaywhen记录编号
(或开始日期
等)属性,并且数据库模式提供了DBMS理解数据的含义,这可以暗示排序。换句话说,语义不仅仅属于前端应用程序。 - onedaywhen在你的例子中,“count”是派生的序列号吗?我不明白为什么要使用什么模式来确定id=15时计数必须为1,而id=3时计数必须为2。
count id section
1 15 7
2 3 2
3 54 1
4 7 4
count id section
1 3 2
2 7 4
3 15 7
4 54 1
在我看来,mikeY的DSum方法可能有效。或者您可以像Allen Browne在这个页面中描述的那样使用不同的排名查询方法。
编辑:您可以使用DCount而不是DSum。我不知道两者之间的速度如何比较,但是DCount避免了仅为每行创建一个字段以存储1的表。
DCount("*","YourTableName","id<=" & [id]) AS counter
好的,我想这足以构成一个答案:以下链接指定了两种方法:http://www.techrepublic.com/blog/microsoft-office/an-access-query-that-returns-every-nth-record/
第一种方法假设您有一个ID值,并使用DCount(类似于@mikeY的解决方案)。
第二种方法假定您可以创建一个VBA函数,该函数将为记录集中的每条记录运行一次,并且每次想要运行计数时都需要手动重置(使用一些VBA),因为它使用“静态”值来运行其计数器。
只要您有合理的数量(百个而不是千个)或记录,第二种方法对我来说看起来是最简单/最强大的。
如果可用,此函数可以从每个记录中调用,来自一个模块。
示例:incrementingCounterTimeFlaged(10, [任何字段]) 应该为您的查询行提供一个从0递增的整数。
'provides incrementing int values 0 to n
'resets to 0 some seconds after first call
Function incrementingCounterTimeFlaged(resetAfterSeconds As Integer,anyfield as variant) As Integer
Static resetAt As Date
Static i As Integer
'if reset date < now() set the flag and return 0
If DateDiff("s", resetAt, Now()) > 0 Then
resetAt = DateAdd("s", resetAfterSeconds, Now())
i = 0
incrementingCounterTimeFlaged = i
'if reset date > now increments and returns
Else
i = i + 1
incrementingCounterTimeFlaged = i
End If
End Function
SQL中的自增
SELECT (Select COUNT(*) FROM table A where A.id<=b.id),B.id,B.Section FROM table AS B ORDER BY B.ID Asc
SELECT ROW_NUMBER() OVER (ORDER By ID DESC) RowNum,
ID,
Section
FROM myTable