说我有查询
SELECT TOP 10 ... FROM ... ORDER BY ...
Access中的(好吧,真的是Jet)。问题是:我怎样才能获得所有其他行... 除了前10行?
答案 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报告的数据源,那么过滤掉不需要的行可能会很麻烦。