こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

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等、その他の方法等もいろいろ参考にしたいので、併せてよろしくお願いいたします。

投稿日時 - 2010-03-05 12:00:17

QNo.5726581

困ってます

質問者が選んだベストアンサー

サブクエリではないので、ご希望の回答ではないと思いますが、
こういう手法もあるよという意味で、ご参考までに。
連番の意味を取り違えていたら、捨ててください。

参考URL:http://www.f3.dion.ne.jp/~element/msaccess/AcTipsFrmRowNo.html

投稿日時 - 2010-03-06 03:38:57

ANo.2

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

こんな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

投稿日時 - 2010-03-05 14:07:48

あなたにオススメの質問