Возвращение номера строки в MS Access - PullRequest
0 голосов
/ 09 ноября 2009

У меня есть 4 таблицы, из которых я выбираю данные с помощью объединений в запросе выбора ... Я хочу серийный номер (номер строки) для каждой записи, когда они выбираются. первая выбранная запись должна быть 1, следующие 2 и т. д. ...

В оракуле равнозначно в RowNum.

Ответы [ 3 ]

4 голосов
/ 09 ноября 2009

Ответ от Brettski - ASP, и ему нужно много редактировать.

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

Выше представлен ваш основной синтаксис. Вы, вероятно, найдете это работает очень медленно. Мое типичное решение - это таблица с полем Autonumber. Это кажется глупым, но это дает мне контроль и, вероятно, в этом случае позволяет скорость.

0 голосов
/ 16 июня 2015

Используя отсортированный запрос Make Table в Access, я использую следующее (не сработает, если вы посмотрите на Query, так как это увеличит число, если вы этого не хотите) ....

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
0 голосов
/ 09 ноября 2009

Со следующей таблицей

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')

Вы можете использовать подзапрос для создания строки подсчета:

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

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

В этой статье объясняется, как добавить столбец подсчета строк в запрос.

...