2016-12-10 5 views
1

私は、この表に合計届け値と同じ名前のMySQLで受信した値からそれを差し引く

テーブル名があります。com_inv

item_name amount date_added 
item 1  1  06/06/2015 
item 2  2  07/06/2015 
item 3  3  08/06/2015 
item 1  10  09/06/2015 
item 2  20  10/06/2015 
item 3  30  11/06/2015 

テーブル名:sls_ordrsを

item_name amount order_status date_received 
item 1  1  received  06/06/2015 
item 2  1  delivered 
item 3  2  received  08/06/2015 
item 1  5  received  09/06/2015 
item 2  5  delivered 
item 3  2  received  11/06/2015 

何I達成したいのは、項目ごとに、com_invの金額の合計から「受け取った」sls_ordrsの金額の合計を減算することです。結果の表は次のようになります。

Item Name Stocked Dispensed Remaining 
item 1  11  6   5 
item 2  22  0   22 
item 3  33  4   29 

SQL Serverを使用している場合は、CTEを使用しますが、MySqlを使用するのはあなたの助けが必要です。これは私が今までに作ったコードです...

SELECT 
    a.item_name, 
    b.stocked AS 'Stocked', 
    sum(a.amount) AS 'Dispensed', 
    IFNULL(b.stocked, 0) - IFNULL(a.amount, 0) AS 'Remaining' 
FROM 
    sls_ordrs a 
LEFT JOIN (
    SELECT 
     item_name AS 'item_name', 
     SUM(amount) AS 'stocked' 
    FROM 
     com_inv 
    GROUP BY 
     item_name 
) b ON a.item_name = b.item_name 
WHERE 
    a.order_status = 'received' 
GROUP BY 
    item_name 

ここで在庫列は私にヌル値を与えます。

+0

ことになって分配何? – e4c5

+0

これは受け取った目録です。 – Ibanez1408

+0

要求した支店が受信しました。 – Ibanez1408

答えて

1

このクエリを使用します。それがうまく動作するはずです。

SQL FIDDLE DEMO

SELECT 
    I.item_name, 
    I.Stocked, 
    S.Dispensed, 
    COALESCE (I.Stocked, 0) - COALESCE (S.Dispensed, 0) AS Remaining 
FROM 
    (
     SELECT 
      item_name AS 'item_name', 
      SUM(amount) AS 'Stocked' 
     FROM 
      com_inv 
     GROUP BY 
      item_name 
    ) I 
LEFT JOIN (
    SELECT 
     item_name, 
     order_status, 
     SUM(amount) AS Dispensed 
    FROM 
     sls_ordrs 
    WHERE 
     order_status = 'received' 
    GROUP BY 
     item_name 
) S ON I.item_name = S.item_name; 
関連する問題