我有一个SQL查询给我X结果,我希望查询输出有一个coulmn调用 计数这样的查询:
count id section
1 15 7
2 3 2
3 54 1
4 7 4
我怎样才能实现这一目标?
答案 0 :(得分:2)
所以在你的例子中,“count”是派生的序列号?我没有看到用什么模式来确定id = 15时的计数必须为1,id = 3时计数必须为2.
count id section
1 15 7
2 3 2
3 54 1
4 7 4
如果id包含唯一值,并且您按ID排序,则可以这样:
count id section
1 3 2
2 7 4
3 15 7
4 54 1
在我看来,mikeY的DSum方法可行。或者您可以使用不同的排名查询方法,正如Allen Browne所描述的at this page
修改:您可以使用DCount代替DSum。我不知道两者之间的速度如何比较,但DCount避免在表格中创建一个字段,只是为每行存储1个。
DCount("*","YourTableName","id<=" & [id]) AS counter
无论您使用DCount还是DSum,如果id值不唯一,计数器值可以包含重复项。如果id是主键,不用担心。
答案 1 :(得分:2)
我坦率地不明白你想要什么,但如果你想要的只是表单上显示的序列号,你可以使用绑定到表单的CurrentRecord属性的控件。具有ControlSource =CurrentRecord
的控件将具有始终准确的“记录编号”,该记录编号按顺序排列,并且将在表单的Recordsource更改时更新(可能需要也可能不需要)。
如果愿意,您可以使用该号码在表单中导航。
但这可能与你所寻找的不一样 - 我根本无法从你发布的问题和评论中的“澄清”中说出来。
答案 2 :(得分:1)
我见过的唯一技巧是,如果你有一个顺序id字段,你可以创建一个新字段,其中每个记录的值为1.然后你执行该字段的运行总和。
添加到您的查询
DSum(“[其中包含1的新字段]”,“[表名称]”,“[ID字段]&lt; =”&amp; [ID字段])作为反击
那应该在Access中产生一个我认为你想要的顺序计数。
HTH。
(Rob Mills从这里偷来的: http://www.access-programmers.co.uk/forums/showthread.php?p=160386)
答案 3 :(得分:1)
好吧,我想这足以构成一个答案:以下链接指定了两种方法:http://www.techrepublic.com/blog/microsoft-office/an-access-query-that-returns-every-nth-record/
第一种方法假设您有一个ID值并使用DCount(类似于@mykey的解决方案)。
第二种方法假设您可以创建一个VBA函数,该函数将为记录集中的EACH记录运行一次,并且每次要运行计数时都需要手动重置(使用某些VBA) - 因为它使用一个“静态”值来运行它的计数器。
只要你有合理的数字(数百,而不是数千)或记录,第二种方法看起来对我来说最简单/最强大。
答案 4 :(得分:0)
您可以使用SQL Server 2008中的ROW_NUMBER()
SELECT ROW_NUMBER() OVER (ORDER By ID DESC) RowNum,
ID,
Section
FROM myTable
然后RowNum显示行号序列。
答案 5 :(得分:0)
如果可以从模块中获取,则可以从每条记录中调用此函数。
示例:incrementingCounterTimeFlaged(10,[anyField])应该为您的查询行提供从0开始递增的int。
'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