商品在庫とそれぞれの賞味期限について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))
集計:合計
どうぞ宜しくお願いします。
お礼
>急がば回れですよ。 その通りですね。結果から言うとできました! tblItem_ListとtblTransactionsのテーブルに絞って単純な選択クエリを作成してみても同じく0件で返ってきたので何がおかしいのかと思っていたのですが、問題は両テーブルの結合フィールドの両方に合致するデータが入っていないと抽出されないということだったみたいです。 今回だと、tblItem_ListのTransaction_IDには今までのデータが入っているがtblTransactionsのTransaction_IDにはこれからのデータを入れて行く予定だったので合致するものが0件でした。 ですので、当該リレーションシップの結合プロパティのところで「一側の全レコードと多側の同じ結合フィールドのレコードだけを含める」に設定すると上手くできました!!!! アドバイス有難うございます!!!