MySQL データベースに 3 つの関連するテーブルがあります。
- inventory_items は、倉庫内のアイテムのタイプを定義します
- inventory_transactions は、追加または削除された在庫の数量を定義します
- 場所は、在庫の場所を定義します
Inventory_transactions には、特定の場所で追加または削除された特定の inventory_item の数を格納する quantity_offset があります。
次のクエリは、global_quantity (指定された inventory_item_id のすべての quantity_offsets の合計) と、場所 ID を知っている限り、特定の場所に対して同じことを行う location_quantity を取得します。
SELECT sku, name, SUM(quantity_offset) AS global_quantity,
(
SELECT SUM(quantity_offset)
FROM inventory_transactions
WHERE inventory_items.inventory_item_id = inventory_transactions.inventory_item_id AND inventory_transactions.location_id = 1
) AS location_quantity
FROM inventory_items
JOIN inventory_transactions ON inventory_items.inventory_item_id = inventory_transactions.inventory_item_id
GROUP BY sku
最終的には、場所ごとに列が追加されるため、結果には次のような値が含まれる場合があります。
sku, name, global_quantity, denver_quantity, dallas_quantity, ft_wayne_quantity
私のフォールバックは、個々の inventory_item ページでこれを行うことです (在庫アイテムを知っていて、場所ごとにグループ化できる場合) が、1 つのクエリでそれを実行し、すべてを 1 つのテーブルに入れることができれば、非常に優れています。
最初は、サブクエリを反復処理できると思っていましたが、プログラムで (AS で) 列名を設定できませんでした。
ご提供いただけるご支援をよろしくお願いいたします。