Mysql 对传递的值求和,然后从同名的接收值中减去

Mysql 对传递的值求和,然后从同名的接收值中减去,mysql,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\U ordrs

我有这张桌子

表名: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\U 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
我想要实现的是,每个项目,从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

此处的stocked列为空值。

使用此查询。希望它能正常工作


分发的应该是什么?是已经收到的库存。由请求分发的分支机构收到。我仍然不清楚这些数据来自何处,您的示例查询没有别名为dispensed的a字段。很抱歉造成混淆。Sql语法是不完整的。这只是我试图创建查询的微弱尝试。我甚至不知道如何开始。请不要理会它。
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;