12

说我有一个查询

SELECT TOP 10 ... FROM ... ORDER BY ...

在 Access 中(嗯,真的是 Jet)。问题是:我怎样才能得到所有其他行......除了前 10 名之外的所有内容?

4

4 回答 4

24

你不能做类似的事情吗

SELECT ... FROM ...
WHERE PK NOT IN (SELECT TOP 10 PK FROM ...)
ORDER BY ...

它可能效率不高,但这是我能想到的唯一方法。AFAIK SQL 中没有“BOTTOM”子句 :)

于 2009-02-05T21:25:09.437 回答
6
SELECT ... FROM ....
WHERE myID NOT IN 
    (SELECT TOP 10 myID FROM ... ORDER BY rankfield)
ORDER BY sortfield

请注意,您的排序顺序可能(如果您愿意)与您的排序顺序不同。

编辑:另一个想法:如果你已经知道有多少 TOTAL 行,你可以这样做(假设 1000 行):

SELECT TOP 990 ... FROM .... ORDER BY sortfield DESC

只需翻转排序,然后取出剩余部分。

当然,如果你仍然想要原始顺序的结果,你必须做一些愚蠢的事情,比如:

SELECT ... 
FROM (SELECT TOP 990 ... FROM .... ORDER BY sortfield DESC)
ORDER BY sortfield ASC
于 2009-02-05T21:27:31.023 回答
3

您可以创建一个排名字段(创建排名列的方法)并从中过滤掉:其中排名>10

于 2009-02-09T17:17:08.613 回答
3

这通常在“客户端”端完成,而不是在 DBMS 上完成,即将所有表的行提取到 ADO Classic 记录集中,然后使用 Filter 属性根据条件删除 10 行,或者排序然后设置然后跳过第一/最后 10 行,或根据需要设置页面长度,然后跳过第一页/最后一页等。它不仅取决于行数,还取决于目标应用程序,例如我知道这是否是一个 MS Access 报告然后过滤掉不需要的行可能会很麻烦。

于 2009-02-12T14:50:01.880 回答