Подтвердить что ты не робот

Выберите "Топ" (всего 10) из... в Microsoft Access

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

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

Ответ 4

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