• ベストアンサー

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

  • ACCESS 更新クエリについて

    更新クエリで更新したいのですが、クロス集計クエリの数値を元にテーブルを更新することは出来ないようで、困っています。 なぜそのようなことをしているかと申しますと、 商品品目_個数_コード(主キー) のようにフィールドを持っているのですが、 印刷に関しては品目ごとに印刷したい、ということで 一度クロス集計クエリ(TRANSFORM)で りんご_ばなな_ぶどう_コード(主キー) 数値_数値_数値_数値 のような並びにして、テーブル作成クエリでテーブルを作成し そのテーブルをレポートに使用しています。 数値などが変わった場合その作成したテーブルの数値を 作成元になったクロス集計クエリで更新したいのですが、出来なくて困っています。 テーブル作成クエリで上書きすると、古いデータが消えてしまうため 何か良い方法はないかと思っています。 回答のほどお願いします。

  • Accessでクロスタブ集計クエリの結果の列を固定にしたい。

    Access2007を使っています。 フィールド1においてAまたはBに一致するもののみをフィールド2(あ、い、う、え、・・)ごとに Countするというクロスタブ集計クエリを作成しました。 デザインビューで見たCriteria行には「"A" or "B"」と入っています。 結果は、   A B あ 1   い 2 2 う 1   え   1 ・ ・ ・ ・ ・ ・ のような感じになります。 この結果を他のクエリ(クエリX)で参照し、AやBという列を使っているため、 もしも、AもしくはBが元のフィールド2の中に1レコードも無い場合、 クロスタブ集計の結果からAもしはBの列そのものがなくなってしまい、 クエリXを実行した際にエラーとなってしまいます。 フィールド2内のAやBのレコード有無に関係なく、常にクロスタブ集計クエリの 結果を一定にする方法はありませんでしょうか?

  • アクセス・選択クエリについて

    アクセス・選択クエリについて こんにちは。現在、選択クエリについて悩んでおります。 テーブルAとテーブルBからそれぞれ3つのフィールドを選び、選択クエリを作成。しかし、出来上がったクエリのデータシートには一切データが表示されていません。ならばと思い、テーブルAからだけ3つのフィールドを選びクエリを表示させると、きちんと表示します。テーブルA,テーブルBには当然主キーが設定されていますが、その事と関係するのでしょうか?ご存知の方、どうか教えてください。宜しくお願い致します。

  • アクセスの更新クエリについて(親子テーブル)

    はじめまして。 アクセスを勉強しはじめて2週間の初心者です。 説明がわかりずらいかもしれませんが、ご容赦ください。 以下のようなテーブルがあります。 ●親テーブル(装置名称と装置番号の組み合わせが主キー) ・装置キー ・装置名称 ・装置番号 ・収容No-1 ・収容No-2 ●子テーブル(主キー設定なし) ・装置キー(親テーブルの装置キーと参照整合:1対多) ・収容No-3 ・最新情報 ●参照テーブル(主キー設定なし) ・収容No-1 ・収容No-2 ・収容No-3 ・最新情報 子テーブルの最新情報フィールドを参照テーブルの最新情報に 更新する更新クエリを作成したいのですが、うまく実行ができ ません。 クエリの作り方の基本がわかっていないと思いますが、私が作 った方法は、 1.上記3つのテーブルをクエリのデザインビューで表示 2.親テーブルと参照テーブルの収容No-1、2を結合 3.子テーブルと参照テーブルの収容No-3を結合 4.クエリの種類を更新クエリに変更 5.テーブルに子テーブル、フィールドに最新情報を設定 6.レコードの更新欄に[参照テーブル]![最新情報]を設定 です。 ビューで確認すると殆どのデータが空白で表示されております。 どのあたりに悪さがあるかをご教授いただけますと助かります。 ご不明な点がありましたら、何なりとお伝えください。 よろしくお願いします。

  • Access クエリについて

    Accessのテーブル1に、フィールド「コード」「回数」があり、レコードとして A,32 B,20 C,13 ・・・というように、ランダムなコードと回数がセットされているとします。コードは主キーです。 このテーブル1を元にしたクエリで A,1 A,2 A,3 ・・・ A,32 B,1 B,2 ・・・ B,20 C,1 C,2 ・・・ C,13 というように、コードごとに「回数」と同じ数のレコードがクエリ上に生成されるようにしたいのですが、こういうことは出来るのでしょうか?出来ればSQLで回答いただけないでしょうか。

  • ACCESS クエリの引き算

    よろしくお願い致します。 クエリ上で計算をしています。 デザインビューで フィールド   組      A班     B班    テーブル   データ    データ    データ 集計    グループ化   カウント   カウント 並べ替え 抽出条件 という状態で、さらに フィールドB班の隣に「A-Bの差」を設けて、「A班のカウント値」-「B班のカウント値」を単純に引き算をしたいのですが、うまくいきません。 集計を「演算」にしてみて、フィールドに  A-Bの差:Count([A班]-[B班]) と入力してみましたが、実行すると表示される値は全て「1」になってしまいます。 単純にカウントした値を引き算したいだけなのですが・・・。 ヘルプを見てもよく分からないので、教えてください。

  • Access クエリが入力できない

    Access 2003を使用しています 以前の担当のかたがつくったデータベースで、 会社で購入している薬剤を管理しているのですが、 これまでできたクエリの入力ができなくなってしまいましたので お力をかしてください。 テーブルA 管理番号 薬剤名 分類番号   ○ メーカー番号 ● 購入日 価格 テーブルB メーカー番号 ● メーカー名 テーブルC 分類番号   ○ 分類名 ○-○、●-●でリレーションシップでつなげています。 ある日、テーブルAのフィールドをいくつか増やしたところ テーブルA、B、Cをもとに作ったクエリの入力ができなくなってしまいました。 入力できるようにするにはどうすればよろしいでしょうか。 主キーは設定していません。 初心者なので、わかりやすく教えていただければうれしいです。

  • ACCESS2000の重複クエリ

    よろしく、お願いします。 ACCESS2000+Win2000で使用しています。 ACCESS2000の”テーブルA”の”フィールドa”の”重複クエリ甲”の結果としてX、Y、Zというデータが出たとします。 そのうち、XのみにテーブルAの”フィールドb(Yes/No型)”にフラグを立てたいのですが、良い方法はありませんか? 私は重複クエリ甲に、更新クエリで更新する事は出来ませんよね? 甲と同じく”重複クエリ乙”を作って、乙は”集計”で先頭のみを出して、甲と乙の”不一致クエリ”で差分を出してみたりもしたのですが、更新クエリを使えない為に、フラグを立てられません。 何か良い方法を教えてください。 お願い致します。

  • Access2003 クロス集計クエリでの合計

    ☆以下のようなテーブルで、フィールド[ID]~[C]があり、文字および数字のデータが混在しています。   ↓  ↓  ↓  ↓  ↓  ↓  ↓  ↓ =========================================== (テーブル(1)) [ID]  [A]      [B]    [C]     1    111     英語    10    2    222     英語    20    3    333     数学    30    4    111     国語    40   5    222     数学    50    6    333     国語    60    7    222     国語    70   8    333     英語    80     9    111     数学    90     =========================================== [課題] クロス集計クエリを作成する (1) フィールド[A]を行見出しに設定、    フィールド[B]を列見出しに設定、    フィールド[C]を集計する項目に設定する。   (2) フィールド[C]の値を列ごとに平均を計算し、    行ごとに合計を計算する。   ※ 列と行で、それぞれ集計した値を表示する   ↓  ↓  ↓  ↓  ↓  ↓  ↓  ↓ =========================================== [クロス集計結果]     合計  英語  国語  数学     111  140   10    40    90        222  140   20    70    50     333  170   80    60    30  --------------- 平均  150   36     56   56 ===========================================   ↑  ↑  ↑  ↑  ↑  ↑  ↑  ↑    上記のようなクロス集計クエリの結果を表示させたいのですが、 どうすればよろしいでしょうか? また、クエリだけでは出来ない場合は、SQLで教えていただければ幸いでございます。 お手数お掛けしますが、何とぞ宜しくお願い致します。

  • ACCESS2000 更新クエリで文字を追加・変更したい

    ACCESS2000のマクロでCSVファイルをインポートし、Excelに出力しています。 そこで途中に更新クエリを使い、文字の追加・変更を行いたいのですが何故かうまくいきません。。。 【テーブルA】 フィールド/受注番号(910004292) 【テーブルB】 フィールド/出荷番号(910005232)/製造番号(910005451) 【テーブルC】 フィールド/受注番号(910005232)/製造番号(910005451)/納期(1021) 受注、出荷、製造の各フィールドは先頭に"0"を追加したいです。 910004292→0910004292 納期は2009/10/21となるように、現在の西暦(できれば自動)/と3桁目にスラッシュを入れて、yyyy/mm/dd形式にしたいです。 更新クエリで フィールド:受注番号 テーブル:テーブルA レコードの更新:"0"&[受注番号] と入力してやるとうまくいきました。 同じように横のフィールドに フィールド:受注番号 受注番号 ・・・ テーブル:テーブルA テーブルB ・・・ レコードの更新:"0"&[受注番号] "0"&[受注番号] ・・・ と各テーブルの全てのフィールドを入力して更新すると、 レコードに物凄い数の"0"が追加されてしまいます。 例:0000000000000000910004292 何度も繰り返しているようなのですが、なぜなんでしょうか? 更新クエリを別々に作ればそれぞれうまくいきました。 ひとつのクエリに複数のテーブルのフィールドを入れると駄目です。 また、納期について1021→2009/10/21にうまく変更する方法はありますでしょうか? 分かりにくくて申し訳ありませんが宜しくお願いいたします。