2010-01-19 2 views
3

Access97 데이터베이스가 있는데 (불행히도) ODBC를 통해 쿼리하고 있습니다.Access97에서 SQL 행 범위를 반환하는 방법은 무엇입니까?

오프셋 K에서 시작하는 J 정렬 된 행을 반환하는 쿼리를 생성하고 싶습니다. 현재 관련 작업을 위해 하위 쿼리와 TOP 키워드를 사용하고 있습니다. 이 새로운 작업을 수행하려고 시도 할 때 사용할 수 있습니다. 일부 소프트웨어에 페이징 형식을 추가하기 때문에이 작업을 수행하고 싶습니다.

이상적으로 사용자 인터페이스는 레코드 50에서 시작하여 날짜 열에 따라 정렬 된 50 개의 레코드를 제공 할 수 있어야합니다.

도움을 주시면 감사하겠습니다.

+0

에서 수 행하는 것보다 더 빠른 것? 그것은 나에게 맞는 해결책처럼 들렸다! – Birger

+0

TOP는 데이터 세트의 시작 또는 끝을 기준으로 그룹을 제공합니다. 주어진 오프셋에서 슬라이스를 제공하지는 않습니다. 아래 네이선의 대답은 그것을 설명합니다. – Jotham

+0

Jet/ACE에는 LIMIT 키워드가 없으므로 TOP 만 수행 할 수 있으며 그렇다고 매우 비효율적이며 SQL을 구성하는 데 절차 코드가 필요합니다. –

답변

3

기본적으로 Access에서 ROW_NUMBER()를 모방하려고합니다. 불행히도 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에서 저장된 쿼리를 만들 것 (A SQL Server에서보기) 다음 응용 프로그램에 다음과 같은 쿼리를 작성하십시오.

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

물론 "5"& "11"클라이언트 응용 프로그램에서 전달하면 현재 사용중인 특정 페이지를 기반으로합니다. (아마 50 및 100 또는 당신을 위해 뭔가 될 것입니다).

+0

나는 그것을 두려워했다! ㅎ ... (열거하는 그들을 사용하여>, <) 고마워요 많은 사람! – Jotham

+0

두 번째 쿼리가 저에게 효과적이었습니다. 감사! –

2

당신은하지에서와 TOP 하위 쿼리에 TOP을 사용할 수 있습니다

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

그것은 아마도 당신이 TOP 키워드로 한 무슨 문제를 설명 할 수 액세스

+0

Jet/ACE의 NOT IN은 쿼리를 최적화하여 기준의 양쪽에서 인덱스를 사용하지 않는다는 점에 유의하십시오. 그리고 그것이 효율적 일 때와 그렇지 않을 때 내 경험으로는 예측할 수 없습니다. –

관련 문제