2017-03-19 14 views
-1

各倉庫について、各製品の見積もり数量を取得する必要があります。この数量は、最後の在庫に記録された数量から、この最後の在庫数からの出荷額を差し引いたものと、この最後の在庫以降の補充数から計算されます。ここで受信した製品の合計を加算し、出荷された製品の合計を在庫に加算するクエリ

は私の実体である:

-warehouse 
    location 
-inventory 
    date 
-product 
    name 
-inventory_product 
    quantity 
    warehouse_id 
    product_id 
    inventory_id 
-resupply 
    date 
-resupplying 
    resupply_id 
    product_id 
    warehouse_id 
    quantity 
-shipment 
    date 
-shipping 
    shipment_id 
    product_id 
    warehouse_id 
    quantity 

私は

select distinctrow product.name, inventory_product.quantity - sum(shipping.quantity) as quantity 
from inventory 
inner join inventory_product on inventory.id = inventory_product.inventory_id 
inner join product on inventory.product_id = product.id 
inner join shipping on (inventory_product.warehouse_id = shipping.warehouse_id and inventory_product.product_id = shipping.product_id) 
inner join shipment on shipping.shipment_id = shipment.id 
where inventory.date <= shipment.date 
group by shipping.product_id; 

...のラインに沿って何かを考えています。しかし、私は補給一部に追加する方法を見ることができません。 ..

+1

※* product *、* inventory *、* shipping *テーブルにはキーがありませんか?このクエリは 'JOIN'の組み合わせがカッコを必要とするため、MS Accessでは有効ではありません。クエリデザイナーを使用して支援します。 – Parfait

+0

すべてのエンティティは、主キーとしてidプロパティを持っています。 Accessがなく、クエリを実行できません。私は誰かを助けるためにそれをやっています。 – Stephane

+0

@nicompまあ、プライマリキーや外部キーのような概念を含め、データベース設計を教える日々を費やして誰かを助けています。私はメールボックスの番や電話番号のような類推を使わなければなりません。彼は自分でこのプロジェクトを達成する方法がないので私はそれを行います。この要求に関して、私はあなたが私の質問で見ることができるように、それを作成しようとする時間を費やしましたが、私はそれを完了できませんでした。そう、はい、私はここで助けを求めています。他人を助けるために、この質問を書くことさえできなかった人は、英語で書かせるだけではありません。 – Stephane

答えて

1

単位レベルと集約レベルのパーツを分割し、最終的な算術式のためにそれらを再び結合することを検討してください。それぞれを、他のクエリのFROM/JOIN句で参照されるストアドクエリとして保存します。

最終インベントリの日付照会(PRODUCT_IDによる凝集体)

SELECT i.product_id, Max(n.date) AS MaxInvDate 
FROM inventory AS n 
INNER JOIN inventory_product AS i ON n.id = i.inventory_id 
GROUP BY i.product_id; 

出荷合計クエリ(MaxInvDate上および上記だ後の合計の数量)

SELECT i.product_id, i.quantity AS inv_qty, idt.date AS inv_date, 
     SUM(s.quantity) AS shipment_qty  
FROM ((inventory_product i INNER JOIN inventory idt ON idt.id = i.inventory_id)  
INNER JOIN (shipping s INNER JOIN shipment sdt ON sdt.id = s.shipment_id) 
    ON s.product_id = i.product_id)  
INNER JOIN LastInvDateQ l 
    ON l.product_id = i.product_id AND idt.date = l.MaxInvDate  
WHERE sdt.date >= l.MaxInvDate  
GROUP BY i.product_id, i.quantity, idt.date 

補給合計クエリ(MaxInvDate上および上記だ後の合計の数量)

SELECT i.product_id, i.quantity AS inv_qty, idt.date AS inv_date, 
     SUM(r.quantity) AS resupply_qty  
FROM ((inventory_product i INNER JOIN inventory idt ON idt.id = i.inventory_id)  
INNER JOIN (resupplying r INNER JOIN resupply rdt ON rdt.id = r.resupply_id) 
    ON r.product_id = i.product_id)  
INNER JOIN LastInvDateQ l 
    ON l.product_id = i.product_id AND idt.date = l.MaxInvDate  
WHERE rdt.date >= l.MaxInvDate  
GROUP BY i.product_id, i.quantity, idt.date 

決勝クエリ

もちろん
SELECT s.product_id, s.inv_date, s.inv_qty, s.shipment_qty, r.resupply_qty, 
     (s.inv_qty - s.shipment_qty + r.resupply_qty) as estimated_qty 
FROM ShipQtyAggQ s 
INNER JOIN ResupplyQtyAggQ r ON (s.inv_date = r.inv_date) 
AND (s.inv_qty = r.inv_qty) 
AND (s.product_id = r.product_id); 

あなたが巣最終クエリ内の派生テーブルはなく、各SELECT文が読みにくくなることができますおよび/または維持する。

+0

私はあなたにビールを借りています。あなたのプロフィールのリンクされたリンク404s。 – Stephane

+0

ハハ...私は助けることができてうれしい!奇妙な、私のプロファイルのリンクは私の最後に動作します。地域/ネットワークアクセスの問題がありますか? – Parfait

+0

私はログインしていますが、LinkedInが言っていることは次のとおりです: "プロファイルが見つかりませんあなたが探しているLinkedInプロファイルが公開されていないか存在しません。ハイチャパラル... – Stephane

関連する問題