Выберите верх (все, кроме 10) из ... в Microsoft Access

скажем, у меня есть запрос

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

в Access (ну, действительно Jet). Вопрос в том, как я могу получить все остальные строки... все за исключением топ-10?

4 ответов


не могли бы вы сделать что-то вроде

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

обратите внимание, что ваш сортированный заказ может (если вы хотите) отличаться от вашего ранжированного заказа.

редактировать: еще одна идея: если вы уже знали, сколько всего строк было, вы могли бы сделать (предполагая 1000 строк):

SELECT TOP 990 ... FROM .... ORDER BY sortfield DESC

просто переверните сортировку и возьмите оставшуюся часть.

конечно, если вы все еще хотите результаты в исходном порядке, вам придется сделать что-то глупое, как:

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

вы можете создать поле ранга (способы создания столбца ранга) и отфильтровать это: где ранг >10


Это то, что часто лучше делать на "клиента", а на СУБД, т. е. принести все таблицы строк в АДО классический набор записей, а затем использовать фильтр свойств, чтобы удалить 10 строк на основе критериев и затем установить то пропустить первые/последние 10 строк или установки длины страницы в надлежащем затем пропустите первую/последнюю страницу и т. д. Это зависит не только от количества строк, но и от целевого приложения, например, я знаю, что если это источник данных для отчета MS Access тогда фильтрация нежелательных строк может быть много хлопот.