• 締切済み

Access 選択クエリで計算結果を出したいのですが

お世話になっております。 Accessの選択クエリを使って、 「仕入マスタの仕入数」-「受注マスタの受注数」=「現在庫数」 を求めたいのですが、 この場合、仕入マスタにも受注マスタにも両方ともにレコードがないと、クエリで結果が求められませんよね?。 仕入マスタをベースに、仕入マスタにしかないレコードは「受注数=0」とみなして、クエリに全件出力させることってできないのでしょうか? 基本的な質問でごめんなさい。 宜しくお願いします。

noname#105246
noname#105246

みんなの回答

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.3

私はジジイなので、若い頃はスポ根的にカラダで覚えました。 当時はCPUは遅く、メモリも少く、DBエンジンの頭も悪かったので、 単に結果が得られるだけではダメで、処理速度も求められました。 会社の若手にSQLを教える時は事例を示し、口頭で説明するように しています。「百聞は一見に云々」でして、こうすると大体は理解 してくれます。SQLはプログラムのように多数のステップから構成 されるわけでは無いので、理論の組み立てが重要です。 本とか、このような場での文字表現では表現する方も、理解する方も 難しさが伴います。 とりあえず、必要なデータ、条件などを箇条書きにすることを薦め ます。あとは事例ごとに自分の考えたSQLをこういう場に提示して、 添削を求めることで、自分の引き出しを多くするくらいでしょうか。

noname#105246
質問者

お礼

>nda23さま アドバイスありがとうございます。 やはり実践が一番の近道ということですね。 今はITとは全く関係ない企業で、一人、IT関係を任されている状態で、聞ける人もだれもいないため 今まで以上に積極的に、この「教えてgoo」などを活用していきたいと思いました。 ありがとうございます。

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.2

SELECT A.仕入数-NZ(B.受注数,0) AS 現在庫数 FROM 仕入マスタ AS A LEFT JOIN 受注マスタ AS B ON A.商品コード=B.商品コード こんな感じですが、両マスタの一意キーが分からないのテキトーです。 LEFT JOIN なので、仕入に有るものは全て出力されます。対応する 受注データが無い場合はNullになります。 ミソはNZ関数で、NZ(項目,項目がNullの場合の値)という書式です。

noname#105246
質問者

お礼

>nda23様 おおおーー!できました! ありがとうございます! こんなに簡単にできることだったとは! やはりSQLで記述することを避けては通れませんね。 AccessのSQLや関数については、皆様専門の本などで勉強されますか? (VBAの詳細な本はあるのですが、SQLについてはちょっとしか触れていなくて。)

noname#245936
noname#245936
回答No.1

…うーむ、できるにはできるんです。 商品マスタを基準に、仕入、受注数をJOINすればOKなんですけど。 商品マスタに分類/フィルタ項目がないと、商品マスタ全部が 吐き出されてゼロだらけでうっとおしいと思います。 たとえば、50万件の商品マスタを持つ企業で、仕入が1点しかなく ても、現在庫台帳は499,999件の数量ゼロレコードが出ます。 そこはどうしましょうか?

noname#105246
質問者

お礼

>yama-takuさま ありがとうございます! SQL記述を無意識にさけていたというか、Accessの普通のクエリでできる範囲なのかと思っていたので JOINに種類があることなども全然思い当たりもしませんでした。 今回は、仕入マスタから仕入合計と受注マスタから受注合計を使って、「現在庫」を出したいのが目的だったので 受注マスタがゼロだらけになっても問題ありませんでした。 ありがとうございました!

関連するQ&A

  • Access2003 一つのクエリで結果を出したい

    お世話になります。 下記テーブルを紐付けてクエリを作成します(Access2003)。 受注テーブル  ・ID  ・コード  ・数量 検品テーブル  ・ID  ・コード  ・検品フラグ マスターテーブル  ・ID  ・コード  ・印刷フラグ 検品テーブルのレコードは、受注テーブルの数量合計が展開されたレコード数となります。例えば、AAAというコードで数量合計が8の場合、検品テーブルではAAAのレコードが8レコード存在することになります。 但し、マスターテーブルの印刷フラグがYesとなっているものは、数量がいくつあっても受注テーブルは1レコード作成されます(数量合計で展開しない)。  受注テーブル   ID コード 数量   1  AAA   5   2  AAA   3   3  BBB  100  検品テーブル   ID コード 検品フラグ   1  AAA   Yes   2  AAA   Yes   3  AAA   Yes   4  AAA   Yes   5  AAA   Yes   6  AAA   Yes   7  AAA   No   8  AAA   Yes   9  BBB   Yes  マスターテーブル   ID コード 印刷フラグ   1  AAA   No   2  BBB   Yes こんな感じです。 そこで各テーブルをコードで紐付けてグループ化し、検品フラグYesで抽出した状態で以下の結果を表示出来るようにしたいところです。 コード 数量合計  AAA   7  BBB  100 要するに印刷フラグがYesのものは受注テーブルの数量合計を表示し、それ以外は検品された数を表示させたいと考えています。 あらかじめ受注テーブルでコードでグループ化し、数量の合計を算出するクエリ(※1)を作成し、そのクエリと検品テーブル、マスターテーブルを紐付けたらうまく表示出来ました。 ※数量合計はIIFで印刷フラグ=Yesの場合は※1の数量合計を、Yesではない場合は検品テーブルのレコードカウント数を表示。 しかし、できれば一つのクエリで上記の結果を表示させたいのですが、可能なのでしょうか。 ご教授お願い致します。

  • アクセスのクエリの組み方を教えてください

    アクセスで、クエリを組みたいのですがうまくできません。 添付画像をご覧ください。 テーブル1の中の「仕入コード1」フィールドと「仕入コード2」フィールドと 仕入コードマスタの「仕入コード」フィールドとの掛け合わせを行いたいです。 その結果、 (1)「仕入コード1」フィールドに存在して、「仕入コード」フィールドに存在しない、 (2)「仕入コード2」フィールドに存在して、「仕入コード」フィールドに存在しない レコードを一度に抽出したいです。 今回の場合であれば、品番222(含むAB)と品番333(含むAD)の2レコードを抽出したいです。 クエリを組みましたが、うまくそのようにできませんでした。 クエリのどこがおかしいのか?ご指摘頂けませんでしょうか。よろしくお願いいたします。

  • access 選択クエリでの抽出条件について

    accessで在庫表を作成しています。 ある時点での在庫を求めるために、 クエリ「Q仕入数合計」で○月○日までの仕入れ数の合計を集計 クエリ「Q納品数合計」で○月○日までの納品数の合計を集計 クエリ「Q在庫表」でその合計を出す という方法にしました。 「Q在庫表」で演算してその結果、在庫数「0」の商品を非表示にして レポートを作成したいのですが、 「Q在庫表」で0以外を抽出しようと条件入力すると、結果がすべて消えてしまい、 抽出することができません。 ちなみに、Q仕入数合計、Q納品数合計はフォーム「F在庫確認日」で入力した日付を もとに抽出して集計しています。 Q在庫表でテストをしようとしてデータシートビューに切り替える際、「仕入数」と「納品数」の パラメータ入力を求められてしまいます。 どのような方法で在庫「0」を非表示にすればよいのでしょうか? 他に必要な情報があればご指示お願いいたします。

  • ACCESSクエリについて

    A仕入先テーブル、B受注マスタテーブルがあって、 受注マスタの1レコードに複数の仕入先名がある場合、A、Bのテーブルを使って、クエリを作成するにはどのようにしたらいいでしょうか?

  • ACCESS 選択クエリでの抽出条件について

    在庫マスターと得意先マスターのテーブルを使用して 在庫マスターのデータを抽出条件により出力したいと思っています。 在庫マスターは区分コード1の倉庫コードと区分コード3の店舗コードと分かれており、 抽出条件は区分コード1の時は倉庫コード199と155は除きます。 区分コード2の時は得意先マスターの形態コードから"1"と"2"のものを抽出します。 デザインビューでクエリ作成するで選択クエリから抽出条件を入力してデータを出力できないのでしょうか。 色々と試していますがエラーが表示され出力できません。 例) If([ST_WHTYPE]="1",([dbo_STOCK].[ST_WHNO]) Not In ("199","155"), IIf([ST_WHTYPE]="3",[CU_SHOPTYPE]="1" Or [CU_SHOPTYPE]="2")) この場合は集計関数・・・・・含んでないクエリーを実行しましたと表示されます。 他には複雑すぎるため評価できませんとかエラーが表示されます。 選択クエリでの抽出条件ではできないのでしょうか。

  • Accessで累計計算する方法を教えてください。

    現在Access2000で、在庫管理をしています。 添付ファイルのように(1)~(3)のようなテーブルがあります。商品を発注するにあたり(3)現在庫の確認と(2)発注済み分の確認、(1)受注内容の確認などと効率の悪い状況です。 そこで各商品ごとに入出庫をみることができるレポートを出力できるようにしたいと思います。例えば、商品Bであれば(4)のようなレポートを出力したいと思います。 (1)と(2)のテーブルのフィールドをユニオンクエリーで結合させるところまでは何とかできたのですが、肝心な"在庫累計"をうまく計算できません。添付ファイルの(A)と(B) 色々調べると、Dsum関数があるようなのですで、このユニオンクエリーをもとに選択クエリーをつくりこの関数を使ってみたのですが(4)のレポートのようにはいきません。"期日"を条件にしたのですが同じ日だとすべて合計されてしまします。また、出力するレコードの順番は日付で昇順、同じ日付のレコードは入庫(プラスのレコード)を上位に、続いて出庫(マイナスのレコード)の順番にしたいです。 (4)のようなレポートが作成できれば方法は問わないです... なにかいい方法をアドバイスをいただけますでしょうか。 宜しくお願いいたします。

  • クエリにて計算したとき。。。

    商品管理でのデータベースについて教えてください。商品マスタ・仕入れ記録・売れた記録の3つをあわせて、商品仕入数合計・商品売数の合計を出し、式で、仕入れ合計数-商品売合計数で現在の在庫がわかるようにしたんですが、仕入れがあるが、売れてない商品はもちろん仕入れた数がそのまま現在の在庫数になるはずなのに、売れてない商品の現在の在庫数のところは空白になってしまうんです。。。よろしくお願いします。

  • access 更新クエリ?追加クエリ?

    access超初心者です。 いま、下記のような在庫表をつくっています。 (出庫テーブルは省略してます) 入庫テーブル  ID  入庫日付  大分類  中分類  小分類  数量   在庫テーブル  ID  大分類   中分類   小分類  最初の数  入庫数   出庫数 入庫更新クエリ *入庫→在庫  大分類        中分類           小分類 ・入庫の全レコードと在庫表の同じ結合フィールドのレコードだけを含める で結合しています。 *在庫表の入庫数  レコードの更新で  NZ([在庫数]![入庫数],0)+NZ([入庫]![数量],0) といれています。 入庫テーブルに入力していき その都度、 入庫更新クエリにて更新し 在庫表に反映させていきたいと思っています。 入庫表には、この先 在庫表にないものもでてくるので 在庫表にないものは 追加、あるものは、更新としていきたいです。 今の状態だと 入庫表のものは、更新クエリでいったん在庫表に反映されるのですが 入庫表にレコードを追加して また更新クエリをかけると 在庫表が、前に更新したレコードの分も 重複して反映してしまいます。 これをなくすには、どういった方法が ありますか? 宜しくお願いいたします

  • ACCESS クエリで”1”でないものを選択するには?

    ACCESS2003で排他選択("1"でないものを選択) をしたいのですが あるフィールドに”1”かブランクが入っていて ”1”以外のものを選択したいのですが クエリのデザイン画面で ------------------------- フィールド テーブル 並べ替え 表示 抽出条件  <> "1" ------------------------- 抽出条件に = "1" を入れると、"1"のレコードのみ 選択できます やりたいのは "1"以外のものを選択したいのです そこで 抽出条件に<> "1"といれると レコードがゼロ件になります また、Not "1"とか <> "1"、とか、Not = "1" と入れてみても、抽出結果はゼロ件になります 原因を教えてください

  • ExcelからAccessのクエリを呼び出したい

    約20,000レコードほどのデータを一気にExcelのVBA上の選択SQLでEditとUpdateで処理しようと思ったのですが、一気に処理できるレコード数に制約があるようでエラーになりました。 Access内のクエリだとOKみたいですがExcelからAccessのクエリを呼び出す方法がわかりません。 どうしたらいいのでしょうか? よろしくお願いします。 バージョンは2002です。