おっしゃる通り、Access SQL には ROW_NUMBER のような
レコードセットの行番号をダイレクトに返す関数は実装されていません。
クエリにおける代替手段としては、Count 関数を用いたサブクエリか
自己結合クエリ、あるいは DCount 関数を用いて「一定の条件に
該当するレコードの件数」をレコードごとに取得し、それぞれの結果が
ユニークかつシーケンシャルな数値として返される演算フィールドを
設けるのが一般的です。
引用:
select
ROW_NUMBER
,tmp.オートナンバー
,tmp.xxx1
,tmp.xxx2
,tmp.xxx3
from
(
とても複雑なSQL
)tmp
しかし、メインクエリの FROM 句でサブクエリを呼び出したり、
複数のテーブル/クエリ同士で JOIN したりしている場合は、
DCount 関数が使えなかったり、SELECT 句で呼び出すサブクエリが
複雑になったりと難があります。
そのような場合は、そのクエリをオブジェクトとして保存するか、
あるいはそのクエリの結果を別のテーブルに出力するかした上で、
そのテーブル/クエリを別のクエリから呼び出して
前述のいずれかの方法を採られた方が無難です。
もしそのクエリの結果に「全てのフィールドの値が完全に一致している
( Count や DCount の結果が必ず同じ値となる)レコード」が
複数件混在している場合、前述の方法ではユニークな値を
取得することが出来ませんので、クエリ以外のオブジェクトを
利用することになるでしょう。
例えば、もし「そのクエリをレポートのレコードソースとした上、
レコードごとに行番号を印字したい」といった場合は、
クエリではなくレポート側の設定やモジュールによって
連番を出力する形を採られた方がよいでしょう。