Access 2010 限制查询结果

3
在MS Access 2010中,限制查询结果为前1000个的语法是什么?
我尝试过以下方法:
SELECT tblGL.[Cost Centre Code]
FROM tblGL
LIMIT 1000;

但我遇到了“FROM子句中的语法错误”的错误。
我还尝试设置Max Records属性,但似乎没有任何作用——无论我在Max Records字段中输入什么值,我仍然会得到7,000多个结果。
我还想要第二个查询,选择接下来的25,000个结果,从第1,001个开始。类似于:
SELECT tblGL.[Cost Centre Code]
FROM tblGL
LIMIT 1001, 25000;
3个回答

2

MySQL和SQLite使用limit。对于SQL Server和MS Access,您需要在查询的select部分中使用top X

select top 1000 tblGL.[Cost Centre Code] FROM tblGL

完美,谢谢 alroc。那么,Access 中与 MySQL 的 LIMIT 1001,25000 相当的是什么(即从第 1,001 条记录开始返回 25,000 条结果)? - Dion
你应该修改原来的问题以包含这个内容,或者发布一个新的问题。这条评论是一个不同但相关的问题。 - alroc

2
那么,与MySQL中的“LIMIT 1001, 25000”(即从第1001个结果开始返回25,000个结果)相对应的Access等价物是什么呢?可惜,在MS Access中,这不像在MySQL中那样直截了当。在Access中,您需要使用嵌套子查询来完成此操作。以下是我的一个答案,展示了如何在C#中构建正确的SQL字符串进行分页:(如何进行MS Access数据库分页+搜索?)。将该答案中的SQL字符串插入到您的表名和列名中,将得到以下查询:
select [Cost Centre Code] from tblGL
where [Cost Centre Code] in (
    select top 25000 sub.[Cost Centre Code]
    from (
        select top 26000 tab.[Cost Centre Code]
        from tblGL tab
        where 1=1
        order by tab.[Cost Centre Code]
    ) sub
    order by sub.[Cost Centre Code] desc
)
order by [Cost Centre Code]

这至少消除了对基本C#知识的需求,但是如果您不知道子查询的工作原理,恐怕您仍然会感到困惑 :-)

问题是:
Access没有直接获取25000行但跳过前1000行的内置方法。
唯一可能的事情就是获取前X行。

所以我这样做 (从内到外):

  1. 加载前26000
    (1000 + 25000, 因为我们想跳过1000行然后加载25000行)

  2. 从这个数据集中,加载前25000行,但按降序排序。
    这将有效地加载第26000到1001行 (按照这个顺序,因为我们按照行进行了降序排序!)

  3. 为了按升序排列行,只需再次从表中加载 (并按升序排序!),但仅加载步骤2中的成本中心代码行。

明白了吗?
是的,乍一看很吓人,但是一旦您“懂得”子查询,实际上并不那么困难。


谢谢Christian。我看了你的帖子,但可能是因为我不写C#,或者是因为我的查询能力有限(很可能是后者!),所以对我来说没有太多意义... - Dion
@Dion:说得好。我刚刚编辑了我的答案,从我的链接中获取了字符串,并将其适应于您的表名和列名! - Christian Specht
谢谢Christian。我成功了!首先,我必须在查询中包含一个唯一字段(id)。我认为这是因为如果前1000条记录中出现非唯一成本中心代码,则会从接下来的25000条记录中排除。确实感谢您的帮助!附:不是我投票否决您的答案,但现在我会点个赞。 - Dion

1

如果您想使用参数

Select Top (@Rows) tblGL.[Cost Centre Code] FROM tblGL

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接