在Microsoft Access中从...中选择Top(除了10之外)

时间:2009-02-05 21:22:16

标签: sql ms-access jet

说我有查询

SELECT TOP 10 ... FROM ... ORDER BY ...
Access中的

(好吧,真的是Jet)。问题是:我怎样才能获得所有其他行... 除了前10行?

4 个答案:

答案 0 :(得分:24)

你不能做像

这样的事吗
SELECT ... FROM ...
WHERE PK NOT IN (SELECT TOP 10 PK FROM ...)
ORDER BY ...

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

答案 1 :(得分: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

答案 2 :(得分:3)

您可以创建排名字段(Ways to Create Rank Column)并过滤掉其中:where rank> 10

答案 3 :(得分:3)

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