Выберите Top (все, кроме 10) из ... в Microsoft Access - PullRequest
12 голосов
/ 06 февраля 2009

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

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

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

Ответы [ 4 ]

24 голосов
/ 06 февраля 2009

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

SELECT ... FROM ...
WHERE PK NOT IN (SELECT TOP 10 PK FROM ...)
ORDER BY ...

это может быть не так эффективно, но это единственный выход из головы, я могу подумать сделать что-то подобное AFAIK, в SQL нет предложения "BOTTOM":)

6 голосов
/ 06 февраля 2009
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
3 голосов
/ 12 февраля 2009

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

3 голосов
/ 09 февраля 2009

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

...