ショボ短歌会

Accessの連番について質問です。

フォームに連番を表示させたいのですが、どうしてもうまくいきません。
当初はDcount関数を使用したのですが、パフォーマンスが非常に悪かった為、サブクエリ化を使用しようと考えています。

SELECT List.ID, List.CreDate, List.Product,
 (SELECT COUNT('ID') FROM T_List AS T WHERE T.ID <= List.ID AND Cate.MaNum = '3') AS RecordCount
FROM T_List AS List INNER JOIN T_MaCate AS Cate ON List.MaCate = Cate.ID
WHERE Cate.MaNum = '3' ORDER BY List.ID;

実際はフォームで選択された条件を元に、SQLをString変数に代入してフォームのRecordSourceに入れています。しかし、うまくカウントできていない為、思うように表示されません。
DCount(""ID"",""Q_List"",""List.ID<="" & [List].[ID]) AS RecordCountと
テーブルの変わりにクエリにすると、連番はうまく生成されるのすが、非常に時間がかかり、
マシンもブンブンとファンが回りだします。

データレコード数は現在1000レコードで、この先3000程度になります。
この辺りに詳しい方や同様に悩まれた方など、アドバイスよろしくお願いいたします。m(_ _)m
サブクエリやDcount等、その他の方法等もいろいろ参考にしたいので、併せてよろしくお願いいたします。

A 回答 (2件)

サブクエリではないので、ご希望の回答ではないと思いますが、


こういう手法もあるよという意味で、ご参考までに。
連番の意味を取り違えていたら、捨ててください。

参考URL:http://www.f3.dion.ne.jp/~element/msaccess/AcTip …
    • good
    • 0

こんなSQLはどうでしょう


SELECT
A.ID
,Max(A.CreDate) AS CreDate
,Max(A.Product) AS Product
,Count(B.ID) AS RecordCount
FROM
(SELECT A.*
FROM T_List AS A
INNER JOIN T_MaCate AS B
ON A.MaCate=B.ID
WHERE B.MaNum="3") AS A
LEFT JOIN
(SELECT A.*
FROM T_List AS A
INNER JOIN T_MaCate AS B
ON A.MaCate=B.ID
WHERE B.MaNum="3") AS B
ON A.ID>=B.ID
GROUP BY A.ID
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!