アプリ版:「スタンプのみでお礼する」機能のリリースについて

Accessのクエリによる集計が出来ない

kamuycikapです。

OKWaveで様々な方のアドバイスを頂きながら、慣れないAccessと悪戦苦闘しております。
一昨日、計算したい表を作成する為にOKWaveに質問を載せました。
http://oshiete.goo.ne.jp/qa/5549286.html

無事に上記のアドバイスでリレーションのオプション設定を行い、集計計算したいクエリの結果を表示することが出来ました。
その表を元にして

下記の質問でアドバイス頂いた方法による集計を行おうとしたのですが、集計出来なくて困っています。
http://oshiete.goo.ne.jp/qa/5544785.html


データベースの構成とキーは以下のとおりです。
--ここから

<データベース構造:リレーションシップ>
リレーションシップとテーブルの構成は下記の通りです。
-->がリレーションシップです。
Kがキーになります。

■テーブルA      ■テーブルB    ■テーブルC    ■テーブルD
K納品書コード --> K納品書コード --> K納品書コード  --> K納品書コード
仕入数          K商品コード  --> K商品コード   --> K商品コード
                            K商品連番    --> K商品連番
                            出品数量        K出品連番
                            商品名           発送個数
                            色             発送日付
                            サイズ
                            売値
※テーブルCからテーブルDへのリレーションオプションを「’テーブルC’の全レコードと’テーブルD’の同じ
結合フィールドのレコードだけを含める。」としています。


<作りたいデータ>
納品書コード、商品コード、商品連番、商品名、色、サイズ、売値、仕入数、出品数量、発送個数、出品在庫数、倉庫在庫


<クエリ>
○グループ
 納品書コード、商品コード、商品連番、商品名、色、サイズ、売値、仕入数、出品数量
○合計(集計)
 発送個数
○出品在庫数(演算)
 [出品数量]-[発送個数]
○倉庫在庫(演算)
 [仕入数]-[発送個数]

<データ状況>
テーブルCのデータは約300レコードありますが、そのうち20件ほどしか商品が発送されていない為、テーブルDのデータは20件しかありません。


<望む結果>
テーブルCのデータが全て表示され、紐つけられたテーブルDのデータがが存在する場合は、発送個数を表示し出品在個数を演算する。
演算した出品在個数を利用して、倉庫在庫も演算する。

<クエリの実行結果>
テーブルCのデータが全て表示され、テーブルDに紐つけられたレコードも表示されるが、テーブルDに入力されている20件のデータが商品連番(テーブルCのフィールド)ごとに集計されない。

--ここまで


<目的>
お店に出品された商品は、日を分けて少しずつ売れていきます。(一日で全部売れることもありますが....)
従って、出品された商品(テーブルCのデータ)に対して売れていく数(テーブルDの複数のレコード)のデータがぶら下がっている形になります。
このようなデータベースですので、出品した商品が何個売れたかを計算する為には、商品に対する売れた個数を集計(合計)しなければなりません。

<結果>
テーブルCの商品連番ごとの発送個数を集計したいのですが、テーブルDの出品連番ごとの集計になっている様子です。

<頂きたいアドバイス>
上記のデータベースとクエリで、テーブルCの商品連番に紐ついたテーブルDに格納されている発送個数の合計値を集計するための方法

以上、識者の方のアドバイスをお願い致します。

A 回答 (1件)

すみません、引用された質問


http://okwave.jp/qa/q5549286.html
の回答者です。
そちらへの回答を作成していたんですが、間に合いませんでした(汗)

> 教えていただいた方法は、合計集計できないのでしょうか??

すみません、質問文の
> 現状では、テーブルDのデータしかテーブルCのレコードが表示されません。。。。
から、演算フィールド部分は作成済みと思い込みました(汗)

演算フィールドについても、「テーブルDにレコードがない場合への対応」の組み込みが
必要だったんですが、そこまで気が回りませんでした(汗)
失礼しました。

「→」型の結合線で、矢印の先側(今回の例ではテーブルD)にレコードがない場合、
フィールドの値は「Null」になります。
Nullと数値の加減乗除、或いは「=」での数値との比較は、いずれも演算結果として
「Null」が返されます。
http://oshiete1.goo.ne.jp/qa4850675.html

このため、テーブルDにレコードがない場合、演算結果は空白表示になってしまいます。
これを回避するには、Nz関数を使用して「0」に変換してやります。


【例】クエリのデザインビューでの『フィールド』の値・式
 <現状>
  発送個数
  出品在庫数: [出品数量]-[発送個数]
 <変更後>
  発送個数合計: Nz([発送個数], 0)
  出品在庫数: Nz([出品数量], 0)-Nz([発送個数], 0)

※複数のテーブルでフィールド名が重複する場合は、以下のように「[Table]![Field]」と
  いう形にする必要がありますので、参考まで:
  発送個数合計: Nz([テーブルD]![発送個数], 0)
  出品在庫数: Nz([テーブルC]![出品数量], 0)-Nz([テーブルD]![発送個数], 0)


・・・以上です。
    • good
    • 0
この回答へのお礼

DexMachinaさん

kamuycikapです。
詳細な回答を頂ありがとうございました。
無事に、目的の処理を導入する事が出来ました。

慣れないAccessに悪戦苦闘しており、頂いた情報は今後の処理についても非常に有用な情報です。

丁寧に回答いただき、非常に感謝しております。

お礼日時:2009/12/28 11:12

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!