ACCESSのクエリでの質問 テーブルAとテーブルBのデータを使用してクエリAを作成する方法

このQ&Aのポイント
  • テーブルAとテーブルBのデータを使用してクエリAを作成する方法について質問させていただきます。
  • クエリAでは、テーブルAのIDと重量のフィールドをそのまま表示し、新たに作成するフィールドとして累計重量と金額を算出します。
  • 累計重量は、テーブルAのID以下のレコードの重量の総和を算出する DSum 関数を使用します。金額は、累計重量が10t以下かそれ以上かによって異なる計算式を適用します。
回答を見る
  • ベストアンサー

条件を満たした次のレコードから

初めまして(^^ ACCESSのクエリでの質問をさせて頂きます。(^^;; テーブルA  ID,重量 と2つのフィールドを持ったテーブルAがあるとします。 テーブルB (金額テーブル kg/円) 10t以下,10t以上 と2つのフィールドを持ったテーブルBがあるとします。 (内容は 10t以下: 11円 10t以上:10円) 上記のテーブルAとテーブルBのデータを使用してクエリAを作成します。 クエリA(テーブルBはテーブル表示にてクエリA内に表示させてあります。) 既存のフィールド: ID,重量 新に作成するフィールド:累計重量,金額  ID ←そのまま表示 重量 ←そのまま表示 累計重量: DSum("重量","テーブルA","ID<=" & [ID] & "") ←累計の重量を算出 金額: IIf(DSum("重量","テーブルA","ID<=" & [ID] & "")<=10000,Int([テーブルB]![10t以下]*[重量]),([テーブルB]![10t以上]*[重量]))  ↑ 累計重量で10t以下と10t以上の金額の割合を変更して算出させる。 テーブルAのデータとして↓ ID 重量 1 1000.6 2 2150.7 3 1821.2 4 5578.3 5 650.5 上記内容にてクエリAを実行すると多分下記の様に表示されます。 ID 重量   累計重量    金額 1 1000.6  1000.6   11006 2 2150.7   3151.3   23657 3 1821.2   4972.5   20033 4 5578.3  10550.8   55783  5  650.5   11201.3   6505 でも本当は下記の様な結果を得たいのです。 ID 重量   累計重量  金額 1 1000.6  1000.6  11006 2 2150.7  3151.3  23657 3 1821.2   4972.5  20033 4 5578.3   10550.8  61361 ←累計で10tを超えたレコードまでは1kg/11円で計算させたい。 5  650.5  11201.3  6505 ←ここから 1kg/10円の計算にしたい。 望む結果を得るためには下記の文にて条件を付け足していくと思いますが 金額: IIf(DSum("重量","テーブルA","ID<=" & [ID] & "")<=10000,Int([テーブルB]![10t以下]*[重量]),([テーブルB]![10t以上]*[重量])) どのような条件の付け方をすれば良いか、困ってしまいました。そのものズバリの答えをお聞きするには余りにずうずうしいと思いますので、 ヒントや似たような感じの例などをご教示頂けたらと思います。 何卒、宜しく御願い致します。

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

  • ベストアンサー
  • papapa0427
  • ベストアンサー率25% (371/1472)
回答No.1

条件が矛盾してます。10t以下と以上と言いながら実際は逆の説明になってます。 また重量の単位はkgですか?累計重量で比較ですか?それなら言われている事はほぼ不可能ですが…? もっと明確なご説明をお願いします。

ag117jp
質問者

お礼

自己解決いたしました。papapa0427様のご指摘にて、改めてクエリを見てると豆電球が灯りました(笑 方法として、累計重量が10t以上超えた時点でDlookup関数で超えた時のIDを取得、iif文にて、IDがID取得の値以下の時の条件,IDとID取得が同じ場合の条件、それ以外 としましたら出来ました。ちょっと回りくどい方法ですが、勉強になりました。有難う御座いました。(^^

ag117jp
質問者

補足

早速のご回答ありがとう御座います。 説明が曖昧になってしまい申し訳御座いません。 重量の単位はkgです。 累計の重量で10tを超えたレコードまでは重量*11円のままで計算して 10tを超えた次のレコードから重量*10円で計算させたいと思っております。 説明が下手すぎて済みませんです(^^; ちなみになんですが、クエリでやるよりも VBAでFindNextとか使用して条件を指定してやればいけそうな気もするのですが(^^; VBAで記述する方法でしたら可能でありましょうか?(^^;;

関連するQ&A

  • Accessクエリで分類ごとの累計を計算する方法

    テーブルのデータをクエリに読み込んで、大分類ID-小分類IDの組合せを元にして、 月々の累計を計算したいのですが、算出式がどうしてもわかりません。 DSUMを使えばいいかなと思い、クエリのフィールドに、 累計:DSUM("金額","tbl_sample",    ) のような感じでやってみたのですが、条件式をどういれてよいかわかりません。 もし分かる方がいらっしゃればお知恵をお貸しください。よろしくお願いします。 イメージ的には以下のような感じで、★箇所のような累計結果を算出したいです。 ------------------------------------------------------------ 元のテーブルファイル名:tbl_sample 月 大分類ID 小分類ID 金額 ★累計 4___1___1___\100_\100 4___1___2___\200_\200 4___2___1___\300_\300 4___2___2___\400_\400 5___1___1___\150_\250 5___1___2___\250_\450 5___2___1___\350_\650 5___2___2___\450_\850 --------------------------------------------------------------

  • Access 2000ひと月単位で一日ごとの累計を出したいのですが・・・。

    いろいろ探して、 累計: DSum("新規","日報","[日付]<=#" & [日付] & "#") という、式をクエリに貼り付けたのですが、これだと、月ごとの累計にならず、困っています。どなたか、お教えいただけないでしょうか ID   日付    年月   新規  累計 1  2008/10/20  2008/10   1   1 2  2008/10/25  2008/10   1   2 3  2008/11/05  2008/11   2   4 ⇒ 2 4  2008/11/10  2008/11   1   5 ⇒ 3 5  2008/11/15  2008/11   2   7 ⇒ 5 6  2008/11/20  2008/11   1   8 ⇒ 6 7  2008/11/25  2008/11   1   9 ⇒ 7 8  2008/11/30  2008/11   2   11 ⇒ 9 9  2008/12/05  2008/12   1   12 ⇒ 1 10  2008/12/10  2008/12   2   14 ⇒ 3 一度クエリで11月(2008/11)だけにしてからやればよいと思ったのですが、DSum関数がテーブルからしか作れないようで、うまくいきません。お願いします。

  • 条件付き合計をSQLで

    SQL初心者です。 ちょっとSQLの作り方で詰まったしまったので、アドバイスいただければと考えています。 月   名前   金額 2   Aさん   15000 12  Bさん 20000 1    Aさん 80000 2    Eさん 14000 ・  ・    ・ ・    ・    ・ のようなテーブルから、月ごとに、誰がいくら使ったかを表示するクエリを作りたいのです。 各フィールドに月、各レコードに人を配置したいと思っています。 一応考えたSQLが↓ SELECT DSUM([月],"テーブル名",月 = 1) AS 1月, DSUM([月],"テーブル名",月 = ) AS 2月, ・・・ AS 12月 FROM テーブル名 GROUP BY 名前 なのですが、かなり的外れかもしれません・・。 二つ(月と名前)の要素でグループ化するってのが難しいです。 アドバイスいただければと思います。

  • 選択クエリーで 2つのテーブルの項目が Null どうしのデータを抽出するには?

    初心者です、教えてください。 テーブルが、2つあって テーブル名: T1 T2 フィールド1: A1 B1 フィールド2: A2 B2 フィールド3: A3 B3 とあった時、選択クエリーで T1 と T2 のフィールドの A1-B1、A2-B2、A3-B3 が、 一致したものを表示するクエリーを作成します。 でも、A2、A3、B2、B3のデータ中には、それぞれ Null値が入っていて、 A2-B2、または、A3-B3 が、Nullどうしなら、一致とみなして、表示するには、 どうしたらいいのでしょうか? Nullのみどうしのデータで、Nullのフィールドを 除いた選択クエリーをつくって、あとで合わせてもいいのですが、 実際のテーブルは、そういうフィールドが、いっぱいあって、大変なんです。 簡単に表示する方法は、あるでしょうか? 初心者なのでむずかしいことは、 やったことがなくて、すいませんが、わかる方がいらっしゃたら、お願いします。

  • ACCESSでレコードのコピー

    ACCESS初心者です。 テーブルt_Aとt_Bがあり、t_Aを元にしたフォームがあるとします。 行いたいのはこのフォームでレコードを選択しボタンをクリックして t_Aの該当レコードのフィールドの値をt_Bのフィールドにコピー(新規追加)したいのです。 追加クエリでなんとかなるかなと思ったのですが思うようなクエリが作れないのです。 アドバイスをいただけませんでしょうか。 マクロ、VBAの利用方法についてはほぼわかっております。

  • 【Access】SELECT文の書き方について

    下記の【クエリ(Q_Select)】を実行すると【現在のクエリ実行結果】のようになりますが、これを下記の【希望するクエリ実行結果】のような表示にしたいと思います。 その為、同じT_Sub.main_idがある場合は、最新のT_Sub.dayのフィールド列のみ抽出し、同じT_Sub.main_idで最新のT_Sub.dayが複数あった場合は一番大きいT_Sub.idのフィールド列を抽出しようと思ったのですが、どのように記述すれば良いか分からなかった為、アドバイスいただける方がいらっしゃいましたら、ご教示の程よろしくお願いします。 【現在のクエリ実行結果】 T_Main.id|field1|T_Sub.id|day|field2 1|A|1|2011/03/01|100 2|A|1|2011/03/02|2000 3|B|2|2011/03/04|400 4|B|2|2011/03/03|500 5|C|3|2011/03/10|300 6|C|3|2011/03/10|200 【希望するクエリ実行結果】 T_Main.id|field1|T_Sub.id|day|field2 2|A|1|2011/03/02|2000 3|B|2|2011/03/04|400 6|C|3|2011/03/10|200 【クエリ(Q_Select)】 SELECT T_Main.id, T_Main.field1, T_Sub.id, T_Sub.day, T_Sub.field2 FROM T_Main INNER JOIN T_Sub ON T_Main.id = T_Sub.main_id; 【テーブル(T_Main)】 id|field1 1|A 2|B 3|C 【テーブル(T_Sub)】 id|main_id|day|field2 1|1|2011/03/01|100 2|1|2011/03/02|2000 3|2|2011/03/04|400 4|2|2011/03/03|500 5|3|2011/03/10|300 6|3|2011/03/10|200 以上、よろしくお願いします。

  • アクセス:文字レコードの集計をクエリで次のようなことを。

    こんにちは。アクセス初心者です。よろしくお願いします。 テーブル、もしくはクエリで次のようなものがあるとします。 id  氏名       A     B     C    D  ・・・ 28 山田 太郎  ○○ 88 海川 花子      △△ 28 山田 太郎          □□ 28 山田 太郎             △□ 88 海川 花子 ×× を id 氏名      A    B    C  D ・・・ 28 山田 太郎  ○○      □□ △□ 88 海川 花子  ××  △△ のようにまとめるクエリでの加工は可能でしょうか? 前提として、1レコードにid、氏名のほかは一つのフィールドを選んで入力することとしています。 よろしくお願いします。

  • 同じフィールドから複数条件のAND条件で抽出する方法

    お世話になります。 同じフィールドから複数条件のAND条件で抽出する方法 DBはAccessです。 フィールド1がA フィールド2がBという条件でしたら Select 抽出フィールド form テーブル where フィールド1=A and フィールド2=B で行っています。 フィールド1がAまたはBでしたら Select 抽出フィールド form テーブル where フィールド1=A or フィールド1=B で行っています。 それではフィールド1がAもBも満たす抽出はどのようにしたら良いのでしょうか。 例: 学生テーブル  フィールド 学生ID、氏名 履修科目テーブル  フィールド 学生ID、同一学生内連番、科目 というテーブル構成で英語、国語のどちらも履修している学生を抽出する場合などです。 2テーブルをリンクしたクエリを作ったのですが、 単にフィールド 学生ID、氏名、同一学生内連番、科目 なのでどちらも履修している学生を抽出できませんでした。 どのようにしたらよろしいのでしょうか。よろしくお願いいたします。

  • ACCESSのクエリで表示されるデータについて

    クエリで表示されるデータの範囲について教えてください。 <状況例> 例えばなのですが、取引先会社の管理データベースとして「テーブルA」と「テーブルB」があったとします。 「テーブルA]のフィールドは「会社ID」、「会社名」、「住所」とします。 「テーブルB]のフィールドは「連絡先ID」、「会社ID」、「担当者名」とします。 そして、「会社ID」をリレーションシップで繋いで、クエリで「テーブルA」「テーブルB」の全てのフィールドを表示したとします。 この時、「テーブルA」にデータが5つあり、「テーブルB」にはデータが2つしかなく、結果リレーションシップを通じて対をなすデータが2つしかない場合には、クエリでは2つしかデータが表示されないと思います。 <質問> クエリではリレーションシップで対をなさないデータは無効となるようですが、対をなさないデータも全てクエリで表示する方法はないのでしょうか。 上記例でいうと、「テーブルA」のデータ5件全てについて表示させたいのですが。もちろん、「テーブルA」のデータ中対をなしていないものについては、「テーブルB」のフィールド内容については「空白」での表示となりますが。

  • accessの書式(金額表示)について

    accessの金額表示について教えてください。 下記のような、レコード毎に累計金額が表示されるよう、 クエリ画面でDSum関数を使いました。 SELECT 伝票.伝票番号, 伝票.日付, 伝票.入金, 伝票.出金, DSum("入金-出金","伝票","伝票番号 <= " & [伝票番号] & "") AS 累計金額FROM 伝票; 結果、数字に間違いはありませんでしたが、 通貨表示にしたかったので、フィールドプロパティの書式を 変更しようとしました。 書式の部分に「\\00,000」と入力してみたのですが、 通貨表示になりませんでした。 何か勘違いをしているのかもしれませんが… どうぞ、ご教授ください。 ちなみに、「伝票.入金」、「伝票.出金」フィールドは伝票テーブル作成時にデータ型を通貨型としています。