В Access97 SQL, как я могу вернуть диапазон строк? - PullRequest
3 голосов
/ 19 января 2010

У меня есть база данных Access97 (к сожалению), и я запрашиваю ее через ODBC.

Я хочу построить запрос, который будет возвращать мне J упорядоченные строки, начиная со смещения K. Сейчас для связанной операции я использую подзапрос и ключевое слово TOP, это работает нормально, но я не думаю, что смогу использовать его для этой новой операции, которую я пытаюсь выполнить. Я хочу сделать это, потому что я хочу добавить некоторую форму подкачки к некоторому программному обеспечению.

В идеале пользовательский интерфейс должен быть в состоянии сказать, дать мне 50 записей, начиная с записи 150, отсортированных по столбцу даты.

Любая помощь будет оценена.

Ответы [ 2 ]

3 голосов
/ 19 января 2010

Вы пытаетесь имитировать ROW_NUMBER () в Access. К сожалению, Access не является хорошим двигателем для подобных вещей. Собака замедляется после ста или около того записей.

С учетом сказанного, вот что вы можете сделать:

SELECT t1.ID, t1.SomeText, t1.SomeDate,
(
  SELECT COUNT(*) + 1
  FROM Table1 AS t2
  WHERE t1.SomeText > t2.SomeText
) as RowNumber
FROM Table1 t1
ORDER BY t1.SomeText

Это даст результат (в моей конкретной таблице):

ID | SomeText             | SomeDate  | RowNumber
10 | 4NGJN                | 1/20/2010 | 1
11 | ABH                  | 1/20/2010 | 2
2  | asldkfj              | 1/20/2010 | 3
1  | asldkfjaslgh         | 1/20/2010 | 4
7  | ewoiuhdkjnlbkjbn     | 1/20/2010 | 5
4  | oihkjldhnlkmdfn,mn   | 1/20/2010 | 6
3  | oihoih               | 1/20/2010 | 7
5  | qwwern               | 1/20/2010 | 8
8  | SKN                  | 1/20/2010 | 9
9  | WEOIN                | 1/20/2010 | 10
6  | wetrhn               | 1/20/2010 | 11
12 | XDNKJ                | 1/20/2010 | 12

Я бы сделал сохраненный запрос в Access (представление в SQL Server), а затем написал бы такой запрос в вашем приложении:

SELECT ID, SomeText, SomeDate, RowNumber
FROM myView
WHERE RowNumber > 5
  AND RowNumber < 11

Конечно, «5» и «11» вы бы передавали из своего клиентского приложения и основывались бы на конкретной странице, на которой вы находитесь. (Вероятно, это будет 50 и 100 или что-то для вас).

2 голосов
/ 19 января 2010

Вы можете использовать TOP с Not In и подзапросом TOP:

 SELECT TOP n ... ID Not In (SELECT TOP k ...) 

Вероятно, это будет быстрее, чем пытаться нумеровать строки в Access

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...