• ベストアンサー

access クエリで集計した数値を別クエリで使いたい

access2003で2000ファイル形式で以下のものを作っています。 テーブル「A」(フィールドは登録番号(主キー)、 書名) 「B」(登録番号(主キー)、 書名) がある。Aの「登録番号の最大値」(100とする)をクエリ(クエリ名「集計クエリ」)で集計して得た。 テーブルBの登録番号(1~30とする)を更新クエリで(1+100 ~ 30+100)に更新したい。そこでデザインビューで登録番号フィールド(テーブルB)の「レコードの更新」欄にビルダーで「[B]![登録番号]+[集計クエリ]![登録番号の最大値]」と入力して実行したら 実行できなかった。(仕方ないので「[B]![登録番号]+100」として実行したら更新できた。)今後もあるので「集計クエリ」で得た値を直接呼んで、更新クエリを実行したいのだが・・・。 わかりにくい質問で恐縮です。ご理解頂けたならば、ご教授ください。

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

  • ベストアンサー
  • bonaron
  • ベストアンサー率64% (482/745)
回答No.1

集計クエリは使わずに [B]![登録番号]+DMax("登録番号","A") で。 テーブル「A」にデータがない場合も考慮するなら [B]![登録番号]+Nz(DMax("登録番号","A"),0)

yamutya
質問者

お礼

なるほど 明快な回答ありがとうございました。

その他の回答 (1)

noname#140971
noname#140971
回答No.2

<A> 登録番号 98 99 100 <B> 登録番号 1 2 3 ? CNNExecute("UPDATE B SET 登録番号=登録番号 + DMax('登録番号','A')") True <B> 登録番号 101 102 103 もちろん、 UPDATE B SET B.登録番号 = B.登録番号+DLOOKUP('Q.登録番号最大値','Q'); と、集計クエリ'Q'を参照させることも可能です。 なお、 ? CNNExecute("UPDATE B SET 登録番号=登録番号 + (SELECT Max(登録番号) FROM A)") True と Access.adp+SQL Server では書けますが、Access.mdb では DMax か DLookup のようです。

yamutya
質問者

お礼

なるほど SQL の達人ですね。 ありがとうございました。

関連するQ&A