[SQL] Microsoft Access를 사용하여 쿼리 결과에서 행 번호
SQLMicrosoft Access를 사용하여 쿼리 결과에서 행 번호
난 항상 테이블에 행 번호를 얻기 위해 SQL 서버에서이 쿼리를 사용합니다 :
SELECT *
FROM (SELECT *,
Row_number()
OVER(
ORDER BY [myidentitycolumn]) RowID
FROM mytable) sub
WHERE rowid = 15
지금은 액세스 2010 년에 일하고이 작동하지 않는 것 같습니다. Access에서이 쿼리에 대한 교체가 있습니까?
해결법
-
==============================
1.MS-액세스 ROW_NUMBER를 지원하지 않습니다 (). 사용 TOP 1 :
MS-액세스 ROW_NUMBER를 지원하지 않습니다 (). 사용 TOP 1 :
SELECT TOP 1 * FROM [MyTable] ORDER BY [MyIdentityCOlumn]
당신이 15 행을해야 할 경우 - MS-액세스 내장, 간단한이 없습니다, 방법은이 작업을 수행합니다. 당신이 얻을 역 중첩 순서를 사용하여 ROWNUMBER을 시뮬레이션 할 수 있습니다 :
SELECT TOP 1 * FROM ( SELECT TOP 15 * FROM [MyTable] ORDER BY [MyIdentityColumn] ) t ORDER BY [MyIdentityColumn] DESC
-
==============================
2.쿼리에서 행 번호를 지정하는 또 다른 방법은 DCOUNT 함수를 사용하는 것입니다.
쿼리에서 행 번호를 지정하는 또 다른 방법은 DCOUNT 함수를 사용하는 것입니다.
SELECT *, DCount("[ID]","[mytable]","[ID]<=" & [ID]) AS row_id FROM [mytable] WHERE row_id=15
-
==============================
3.나는 팀 당 지점의 최고의 X 결과를 필요로했다.
나는 팀 당 지점의 최고의 X 결과를 필요로했다.
하지 않습니다 랭킹 동일한 점으로 결과가이 문제를 해결합니다. 나는 recordnumber이 필요합니다 그래서
나는 ID 변화에 재설정하는 recordnumber를 만들 Access에서 VBA 기능을했다.
당신은 어디 recordnumber <이 쿼리를 조회해야 = X 팀 당 포인트를 획득 할 수 있습니다.
NB 액세스 레코드 번호를 변경
그건 내가 그런 일 것이라고 생각 것이 아니다.
recordnumbers 및 키 또는 테이블의 추가 필드를 임시 테이블을 사용하고 저장하여이 문제를 해결했다.
SELECT ID, Points, RecordNumberOffId([ID}) AS Recordnumber FROM Team ORDER BY ID ASC, Points DESC;
그것은 호출 사이에 기억해야 할 3 개 모듈 수준 변수를 사용
Dim PreviousID As Long Dim PreviousRecordNumber As Long Dim TimeLastID As Date Public Function RecordNumberOffID(ID As Long) As Long 'ID is sortgroup identity 'Reset if last call longer dan nn seconds in the past If Time() - TimeLastID > 0.0003 Then '0,000277778 = 1 second PreviousID = 0 PreviousRecordNumber = 0 End If If ID <> PreviousID Then PreviousRecordNumber = 0 PreviousID = ID End If PreviousRecordNumber = PreviousRecordNumber + 1 RecordNumberOffID = PreviousRecordNumber TimeLastID = Time() End Function
-
==============================
4.이 오래된 질문이지만, 이것은 나를 위해 일했지만, 나는 그것의 효율성을 테스트 한 적이 ...
이 오래된 질문이지만, 이것은 나를 위해 일했지만, 나는 그것의 효율성을 테스트 한 적이 ...
SELECT (SELECT COUNT(t1.SourceID) FROM [SourceTable] t1 WHERE t1.SourceID<t2.SourceID) AS RowID, t2.field2, t2.field3, t2.field4, t2.field5 FROM SourceTable AS t2 ORDER BY t2.SourceID;
이 방법의 장점 :
마지막 생각들
이 실질적으로 모든 데이터 유형에서 작동하지만, 나는 어떤을 위해, 그것은 다른 문제를 만들 수 있음을 강조해야합니다. 예를 들어, 문자열, 고려 :
ID Description ROWID aaa Aardvark 1 bbb Bear 2 ccc Canary 3
내가 삽입한다면 : 멧돼지 BBA, 다음 카나리아 ROWID가 변경됩니다 ...
ID Description ROWID aaa Aardvark 1 bbb Bear 2 bba Boar 3 ccc Canary 4
-
==============================
5.나는 () 문자열 필드 및 NOT ID, 백작 (*) 및 DCOUNT 알파벳 순으로 정렬하고 있기 때문에 접근 방법은 나를 위해 작동하지 않았다. 내 솔루션은 행 번호를 반환하는 함수를 작성했다 :
나는 () 문자열 필드 및 NOT ID, 백작 (*) 및 DCOUNT 알파벳 순으로 정렬하고 있기 때문에 접근 방법은 나를 위해 작동하지 않았다. 내 솔루션은 행 번호를 반환하는 함수를 작성했다 :
Option Compare Database Option Explicit Private Rst As Recordset Public Function GetRowNum(ID As Long) As Long If Rst Is Nothing Then Set Rst = CurrentDb.OpenRecordset("SELECT ID FROM FileList ORDER BY RealName") End If Rst.FindFirst "ID=" & ID GetRowNum = Rst.AbsolutePosition + 1 ' Release the Rst 1 sec after it's last use '------------------------------------------ SetTimer Application.hWndAccessApp, 1, 1000, AddressOf ReleaseRst End Function Private Sub ReleaseRst(ByVal hWnd As LongPtr, ByVal uMsg As Long, ByVal nIDEEvent As Long, ByVal dwTime As Long) KillTimer Application.hWndAccessApp, 1 Set Rst = Nothing End Sub
-
==============================
6.위의 솔루션에 대한 감사합니다! DCOUNT 너무 나를 위해 속임수를 썼는지!
위의 솔루션에 대한 감사합니다! DCOUNT 너무 나를 위해 속임수를 썼는지!
내가 날짜 컬럼의 조합과의 정렬 부분 (뿐만 아니라 몇 가지 추가 조건)에 대한 고유 식별자를 사용했다, 그래서 여기에 내가하고 결국 무엇을 : 1) 나는 DateColumnA가 null 인 경우 DateColumnB는 다음 사용 DateColumnC null의 경우 확인 후, 확인했다; 여러 레코드가 동일한 날짜 값이있는 경우 다음, 그들은 모두 같은 ID로 끝! 2) 그래서, 나는 테이블의 정수 고유 ID를 사용하고, "분"으로 시간을 추가 할 것입니다 생각. 이것은 항상 다른 결과를 제공 할 것입니다 3) 마지막으로, 0에서 시작하는 카운트 결과 위의 논리는 ... 그래서 그냥 하나를 추가!
SELECT 1+DCount("[RequestID]","[Request]","Archived=0 and ProjectPhase <> 2 and iif(isnull(DateColumnA)=true,iif(isnull(DateColumnB)=true,DateColumnC,DateColumnB),DateColumnA)+(RequestID/3600) < #" & if(isnull(DateColumnA)=true,iif(isnull(DateColumnB)=true,DateColumnC,DateColumnB),DateColumnA) + (RequestID/3600) & "#") AS RowID, FROM Request ORDER BY 1
나는 이것이 당신을 도움이되기를 바랍니다!
-
==============================
7.나는 늦을 수 있습니다. 간단하게 유형의 일련 번호와 테이블에 새로운 필드 ID를 추가합니다. 이 고유 ID를 생성합니다 너무 Access에서 활용할 수
나는 늦을 수 있습니다. 간단하게 유형의 일련 번호와 테이블에 새로운 필드 ID를 추가합니다. 이 고유 ID를 생성합니다 너무 Access에서 활용할 수
from https://stackoverflow.com/questions/17279320/row-numbers-in-query-result-using-microsoft-access by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 어떻게 PostgreSQL의 ORDER BY 절에서 별칭을 사용 하는가? (0) | 2020.05.04 |
---|---|
[SQL] 클러스터 인덱스의 성능 향상은 기본 키를 GUID (0) | 2020.05.04 |
[SQL] 쿼리 날짜 식 느린 실행되지만 빠른 문자열 리터럴로 (0) | 2020.05.04 |
[SQL] SQL 서버 (TSQL) -이 병렬로 EXEC 문에 수 있습니까? (0) | 2020.05.04 |
[SQL] 이 코드 방지 SQL 주입합니까? (0) | 2020.05.04 |