说我有一个查询
SELECT TOP 10 ... FROM ... ORDER BY ...
在 Access 中(嗯,真的是 Jet)。问题是:我怎样才能得到所有其他行......除了前 10 名之外的所有内容?
你不能做类似的事情吗
SELECT ... FROM ...
WHERE PK NOT IN (SELECT TOP 10 PK FROM ...)
ORDER BY ...
它可能效率不高,但这是我能想到的唯一方法。AFAIK SQL 中没有“BOTTOM”子句 :)
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
您可以创建一个排名字段(创建排名列的方法)并从中过滤掉:其中排名>10
这通常在“客户端”端完成,而不是在 DBMS 上完成,即将所有表的行提取到 ADO Classic 记录集中,然后使用 Filter 属性根据条件删除 10 行,或者排序然后设置然后跳过第一/最后 10 行,或根据需要设置页面长度,然后跳过第一页/最后一页等。它不仅取决于行数,还取决于目标应用程序,例如我知道这是否是一个 MS Access 报告然后过滤掉不需要的行可能会很麻烦。