Номера строк в результате запроса с помощью Microsoft Access

Я всегда использую этот запрос в sql server для получения номера строки в таблице:

SELECT *
FROM   (SELECT *,
               Row_number()
                 OVER(
                   ORDER BY [myidentitycolumn]) RowID
        FROM   mytable) sub
WHERE  rowid = 15  

теперь я работаю в Access 2010, и это, похоже, не работает. Есть ли замена для этого запроса в Access?

4 ответов


MS-Access не поддерживает ROW_NUMBER (). Используйте TOP 1:

SELECT TOP 1 *
FROM [MyTable]
ORDER BY [MyIdentityCOlumn]

Если вам нужна 15-я строка-MS-Access не имеет простого, встроенного способа сделать это. Вы можете имитировать номер строки, используя обратный вложенный порядок, чтобы получить это:

SELECT TOP 1 *
FROM (
  SELECT TOP 15 *
  FROM [MyTable]
  ORDER BY [MyIdentityColumn] ) t
ORDER BY [MyIdentityColumn] DESC

другой способ присвоить номер строки в запросе использовать


мне нужны были лучшие результаты X очков в команде. Ранжирование не решает эту проблему, когда есть результаты с равными точками. Поэтому мне нужен номер записи

Я сделал функцию vba в access, чтобы создать номер записи, который сбрасывается при изменении идентификатора

вы должны запросить этот запрос с where recordnumber

NB Access изменяет номер записи

  1. при запросе запроса отфильтрованы по записи номер
  2. когда вы отфильтровываете некоторые результаты
  3. при изменении порядка сортировки

    это не Ват я думал, что это произойдет.

решите это с помощью временной таблицы, сохраняя номера записей и ключи или дополнительное поле в таблице .

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

Я могу опоздать. Просто добавьте новый идентификатор поля в таблицу с типом AutoNumber. Это создаст уникальные идентификаторы и может использовать в Access too