访问2010限制查询结果

时间:2014-06-13 19:04:12

标签: sql ms-access ms-access-2010

MS Access 2010中用于将查询结果限制为前1000个的语法是什么?

我试过这个

SELECT tblGL.[Cost Centre Code]
FROM tblGL
LIMIT 1000;

但是我收到错误'FROM子句中的语法错误'。

我也尝试过设置Max Records属性,但它似乎没有做任何事情 - 无论我在Max Records字段中输入什么值,我仍然可以得到7,000+个结果。

我还希望有一个第二个查询,从1,001st开始选择下一个25,000。类似的东西:

SELECT tblGL.[Cost Centre Code]
FROM tblGL
LIMIT 1001, 25000;

3 个答案:

答案 0 :(得分:2)

  

那么Access的等价物是什么:LIMIT 1001,25000(即从1,001开始返回25,000个结果)?

不幸的是,在MS Access中,这并不像MySQL那么简单 在Access中,您需要使用嵌套子查询。

这是我的答案,我正在展示如何在C#中为分页构建正确的SQL字符串:
How to do MS Access database paging + search?

从该答案中获取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中加载Cost Centre Codes的行。 / p>

  4. 知道了吗? 是的,乍一看看起来令人生畏,但是一旦你“获得”子查询,它实际上并不那么困难。

答案 1 :(得分:1)

MySQL& SQLite使用limit。对于SQL Server& MS Access,您需要使用查询的top X in the select portion

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

答案 2 :(得分:1)

如果您想使用参数

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