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