こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

ACCESSのクエリで実行結果が上手く返らない

商品在庫とそれぞれの賞味期限についてAccessで管理しようと思っているのですが、多々上手くいかないところがあり困っています。
今回質問させて頂きたいのはクエリに関してです。
以下のようにテーブル、リレーションシップ、クエリを作成していますが、実行しても結果が一件も返ってきません。
データはtblItem_Infoに約1000件、tblItem_Listに約1700件入っています。tblTransactionsと tblReceive とtblIssueには動作テストのための数件のみです。
リレーションを組むところから知識不足でお恥ずかしいのですが、原因また解決方法を教えていただけないでしょうか?

アスタリスク付きのフィールドが主キーです。
テーブル:tblItem_Info
フィールド:*Item_ID , Description , Shelf_Life
テーブル:tblItem_List
フィールド:*Transaction_ID , Item_ID, Inventory_Qty, Production_Date
テーブル:tblTransactions
フィールド:*ID , Transaction_ID , Receive_ID , Issue_ID , Receive_Qty , Issue_Qty
テーブル:tblReceive
フィールド:*Receive_ID , Receive_Date
テーブル:tblIssue
フィールド:*Issue_ID , Issue_Date

リレーションは全て参照整合性にチェックで以下のようになっています。
tblItem_InfoのItem_ID - tblItem_ListのItem_ID
tblItem_ListのTransaction_ID - tblTransactionsのTransaction_ID
tblReceiveのReceive_ID - tblTransactionsのReceive_ID
tblIssueのIssue_ID - tblTransactionsのIssue_ID

クエリはデザインビューで作成したものをSQLに直すと長いですが以下のようになりました。
SELECT tblItem_List.Item_ID, tblItem_Info.Description, Sum(Nz([tblItem_List.Inventory_Qty],0)+Nz([tblTransactions.Receive_Qty],0)-Nz([tblTransactions.Issue_Qty],0)) AS On_Hand, Sum(tblTransactions.Receive_Qty) AS SumOfReceive_Qty, Sum(tblTransactions.Issue_Qty) AS SumOfIssue_Qty, tblItem_List.Production_Date, tblItem_Info.Shelf_Life, DateValue([tblItem_List.Production_Date]+[tblItem_Info.Shelf_Life]) AS Expiration_Date
FROM tblReceive INNER JOIN (tblItem_Info INNER JOIN (tblIssue INNER JOIN (tblItem_List INNER JOIN tblTransactions ON tblItem_List.Transaction_ID = tblTransactions.Transaction_ID) ON tblIssue.Issue_ID = tblTransactions.Issue_ID) ON tblItem_Info.Item_ID = tblItem_List.Item_ID) ON tblReceive.Receive_ID = tblTransactions.Receive_ID
GROUP BY tblItem_List.Item_ID, tblItem_Info.Description, tblItem_List.Production_Date, tblItem_Info.Shelf_Life, DateValue([tblItem_List.Production_Date]+[tblItem_Info.Shelf_Life]);

また、On_Hand/在庫を求める式のところですが、この書き方でいいのか結果が返ってこないので分かりませんでした。
On_Hand:Nz([tblItem_List.Inventory_Qty],0)+Nz([tblTransactions.Receive_Qty],0)-Nz([tblTransactions.Issue_Qty],0))
集計:合計

どうぞ宜しくお願いします。

投稿日時 - 2017-02-09 11:54:23

QNo.9291760

すぐに回答ほしいです

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

Q、どうぞ宜しくお願いします。
A、まずは、簡単なSQL文から出発して・・・

1、SQL文作成
2、SQL文テスト
3、SQL文修正→2に戻る

と、ステップバイステップで作業をされたらどうですか?急がば回れですよ。

投稿日時 - 2017-02-09 12:06:25

お礼

>急がば回れですよ。
その通りですね。結果から言うとできました!

tblItem_ListとtblTransactionsのテーブルに絞って単純な選択クエリを作成してみても同じく0件で返ってきたので何がおかしいのかと思っていたのですが、問題は両テーブルの結合フィールドの両方に合致するデータが入っていないと抽出されないということだったみたいです。
今回だと、tblItem_ListのTransaction_IDには今までのデータが入っているがtblTransactionsのTransaction_IDにはこれからのデータを入れて行く予定だったので合致するものが0件でした。

ですので、当該リレーションシップの結合プロパティのところで「一側の全レコードと多側の同じ結合フィールドのレコードだけを含める」に設定すると上手くできました!!!!

アドバイス有難うございます!!!

投稿日時 - 2017-02-10 00:21:51

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問