Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 从…中选择顶部(除10以外的所有)。。。在Microsoft Access中_Sql_Ms Access_Jet - Fatal编程技术网

Sql 从…中选择顶部(除10以外的所有)。。。在Microsoft Access中

Sql 从…中选择顶部(除10以外的所有)。。。在Microsoft Access中,sql,ms-access,jet,Sql,Ms Access,Jet,假设我有一个问题 SELECT TOP 10 ... FROM ... ORDER BY ... 在访问(嗯,真的是喷气式飞机)。问题是:如何获得所有其他行。。。除了前十名之外,其他的都有吗?你不能做一些类似的事情吗 SELECT ... FROM ... WHERE PK NOT IN (SELECT TOP 10 PK FROM ...) ORDER BY ... 这可能没有那么有效,但这是我脑子里唯一想做的事情。好了,SQL中没有“BOTTOM”子句:) 请注意,您的排序顺序可能(如果

假设我有一个问题

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

在访问(嗯,真的是喷气式飞机)。问题是:如何获得所有其他行。。。除了前十名之外,其他的都有吗?

你不能做一些类似的事情吗

SELECT ... FROM ...
WHERE PK NOT IN (SELECT TOP 10 PK FROM ...)
ORDER BY ...
这可能没有那么有效,但这是我脑子里唯一想做的事情。好了,SQL中没有“BOTTOM”子句:)

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

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

只需翻转排序,然后取剩下的部分

当然,如果您仍然希望结果保持原来的顺序,则必须执行一些愚蠢的操作,如:

SELECT ... 
FROM (SELECT TOP 990 ... FROM .... ORDER BY sortfield DESC)
ORDER BY sortfield ASC

您可以创建一个秩字段()并过滤掉它:如果秩>10,则最好在“客户机”端完成,而不是在DBMS上,也就是说,将表的所有行提取到ADO Classic记录集中,然后使用filter属性根据条件删除10行,或者排序然后设置,然后跳过前/后10行,或者根据需要设置页面长度,然后跳过第一页/最后一页等。这不仅取决于行数,还取决于目标应用程序。例如,我知道,如果这是MS Access报告的数据源,则过滤掉不需要的行可能会非常麻烦

这曾经是我的面试问题。我以类似的方式回答,我希望后者会比notin快得多,因为notin不能有效地使用索引。实际上,使用DCount()获取recordcount然后获取其余记录可能会更快。
SELECT TOP 990 ... FROM .... ORDER BY sortfield DESC
SELECT ... 
FROM (SELECT TOP 990 ... FROM .... ORDER BY sortfield DESC)
ORDER BY sortfield ASC