出来上がりのSQLは以下の通りです。
SELECT A.ファイル名A, B.層番号 FROM
(SELECT ファイル名A FROM テーブルA
WHERE 正式品名='~' AND 試作番号=~
AND ロット番号=~ GROUP BY ファイル名A
HAVING COUNT(ファイル名A)>1) AS A
INNER JOIN テーブルA AS B
ON A.ファイル名A=B.ファイル名A
但し、ファイル名Aと層番号は1:1の関係が無いと
正しい結果になりません。
また、WHERE 項目 In (SELECT ~)のような
書式は古い書き方で、現在はJOIN句を使います。
mdb内のクエリを動的に変更することは
好ましくありません。止むを得ない場合も
ありますが、大抵はサブクエリを使えば、
解決するはずです。
SELECT * FROM A WHERE ~ << クエリ(1)
SELECT * FROM クエリ1 << クエリ(2)
↓
SELECT * FROM (SELECT * FROM A WHERE ~)
このようにすれば、クエリなしでRecordsetが
生成できます。できればクエリ(1)とクエリ(2)の
SQLを開示してください。
質問者
補足
返事が遅くなってしまい申し訳ございませんでした。ご回答頂きありがとうございます。SQLを以下に示します。
クエリ(1)
SELECT テーブルA.シリーズ名, テーブルA.正式品名, テーブルA.試作番号, テーブルA.ロット番号, テーブルA.層番号, テーブルA.ファイル名A, テーブルA.ファイル名B
FROM テーブルA
GROUP BY テーブルA.シリーズ名, テーブルA.正式品名, テーブルA.試作番号, テーブルA.ロット番号, テーブルA.層番号, テーブルA.ファイル名A, テーブルA.ファイル名B;
クエリ(2)
SELECT クエリ(1).ファイル名A, クエリ(1).層番号
FROM クエリ(1)
WHERE (((クエリ(1).ファイル名A) In (SELECT [ファイル名A] FROM [クエリ(1)] As Tmp GROUP BY [ファイル名A] HAVING Count(*)>1 )))
ORDER BY クエリ(1).ファイル名A;
なお、やりたい事は以下の通りです。
A.利用者側のニーズに合わせVBA側で「正式品名」「試作番号」「ロット番号」に関する任意の抽出条件を設定
B.その抽出条件の範囲内でファイル名Aが重複しているものを検索
C.ファイル名Aが重複しているもののファイル名A並びに層番号一覧をExcel出力
従って、mdb内のクエリを動的に変更する必要は特にありません。
お礼
layyさんに教えて頂いた方法で無事、解決しました。 layyさんやnda23さんにアドバイス頂くまで、そもそもSQLの意味を理解しようとすら考えておらず、SQLはただ単にAccessのデザインビューで作ったクエリをSQLビューでコピペするだけのものとしてしか認識していませんでした。よくよく構文を見てみると非常にシンプルですし、もっとしっかりSQLを勉強する事にします。本当にどうもありがとうございました。