假设我有一个查询
SELECT TOP 10 ... FROM ... ORDER BY ...
在 Access(实际上是 Jet 引擎)中,问题是:如何获取除前 10 行以外的所有其他行?
你不能做类似这样的事情吗?
SELECT ... FROM ...
WHERE PK NOT IN (SELECT TOP 10 PK FROM ...)
ORDER BY ...
这可能不是非常高效,但这是我能想到的唯一做法。据我所知,SQL中没有“BOTTOM”子句 :)
SELECT ... FROM ....
WHERE myID NOT IN
(SELECT TOP 10 myID FROM ... ORDER BY rankfield)
ORDER BY sortfield
SELECT TOP 990 ... FROM .... ORDER BY sortfield DESC
只需将排序翻转,然后取剩余部分即可。
当然,如果您仍希望结果以原始顺序呈现,那么您必须执行一些愚蠢的操作,例如:
SELECT ...
FROM (SELECT TOP 990 ... FROM .... ORDER BY sortfield DESC)
ORDER BY sortfield ASC
您可以创建一个排名字段 (创建排名列的方法) 并基于此进行过滤: where rank >10
您可以创建一个“排名”字段,然后根据该字段进行筛选: where rank >10。在处理IT技术相关内容时,更好的做法通常是在“客户端”而不是DBMS上进行,即将表中所有行提取到ADO Classic记录集中,然后使用过滤器属性基于条件删除10行,或者排序,然后设置跳过第一个/最后10行,或者根据需要设置页面长度,然后跳过第一个/最后一页等。这不仅取决于行数,还取决于目标应用程序,例如我知道,如果这是MS Access报告的数据源,则过滤掉不需要的行可能会很麻烦。