2009-11-09 1 views
0

나는 4 개의 테이블을 가지고 있는데, select 쿼리에서 조인을 사용하여 데이터를 선택합니다 ... 레코드를 가져올 때 일련 번호 (행 번호)를 원합니다. 첫 번째 가져온 레코드는 1, 다음 2 등이되어야합니다.MS Access에서 행 번호를 반환합니다.

oracle에서 RowNum의 동등 함. 당신은 계산 행을 생성하는 하위 쿼리를 사용할 수 있습니다

SET NOCOUNT ON 

CREATE TABLE people 
( 
    firstName VARCHAR(32), 
    lastName VARCHAR(32) 
) 
GO 

INSERT people VALUES('Aaron', 'Bertrand') 
INSERT people VALUES('Andy', 'Roddick') 
INSERT people VALUES('Steve', 'Yzerman') 
INSERT people VALUES('Steve', 'Vai') 
INSERT people VALUES('Joe', 'Schmoe') 

다음 표와

+0

쿼리 외부에서 rownumber를 구현한다고 생각하십니까? 귀하의 응용 프로그램에서 rownumber를 사용하려는 계획을 정확히 파악한다면 제가 제공 할 수있는 많은 가능성이 있습니다. 세부 정보를 추가하면 가장 적절한 답변을 드리겠습니다. – JohnFx

답변

-1

:

SELECT 
    rank = COUNT(*), 
    a.firstName, 
    a.lastName 
FROM 
    people a 
    INNER JOIN people b 
    ON 
     a.lastname > b.lastname 
     OR 
     ( 
      a.lastName = b.lastName 
      AND 
      a.firstName >= b.firstName 
     ) 
GROUP BY 
    a.firstName, 
    a.lastName 
ORDER BY 
    rank 

이 방법의 문제는 중복이있는 경우 카운트가 해제 될 것입니다 결과 집합에

article은 쿼리에 행 집계 열을 추가하는 방법을 잘 설명합니다.

+1

스크립트가 Access에서 실행됩니까? –

+0

예, 잘 실행해야합니다. – Brettski

+2

MSSQL 스크립트가 아닌 MS Access 쿼리 인 것 같습니다. – sarh

4

Brettski의 대답은 ASP 풍미이며 많은 편집이 필요합니다.

SELECT DCOUNT("YourField","YourTable","YourField <= '" & [counter] & "'") 
    AS RowNumber, 
    YourField as counter FROM YourTable; 

위의 내용이 기본 구문입니다. 이것은 매우 느리게 실행되는 것을 알 수 있습니다. 내 일반적인 해결책은 Autonumber 필드가있는 버킷 테이블입니다. 그것은 kludgy로 보이지만, 그것은 나를 제어하고 아마이 경우 속도를 허용합니다.

+0

"Autonumber 필드가있는 버킷 테이블"은 JohnFX가 일찌감치 언급 한 것과 같습니다 ... – Smandoli

0

Access에서 정렬 된 테이블 만들기 쿼리를 사용하면 쿼리를 보면 숫자가 증가하지 않으므로 다음과 같이 사용합니다.

setRowNumber 'resetting increment before running SQL 
DoCmd.RunSQL ... , rowNumber([Any Field]) AS ROW, ... 

'Increment Number: Used to create temporary sorted Table for export 
Private ROWNUM As Long 

'dummyField: must take an input to update in Query 
Public Function rowNumber(ByVal dummyField As Variant, Optional ByVal incBy As Integer = 1) As Long 
    ROWNUM = ROWNUM + incBy 'increments before value is returned 
    rowNumber = ROWNUM 
End Function 

Public Function setRowNumber(Optional ByVal setTo As Long = 0) As Long 
    ROWNUM = setTo 
    setRowNumber = ROWNUM 
End Function