Mysql 对传递的值求和,然后从同名的接收值中减去
我有这张桌子 表名:com_invMysql 对传递的值求和,然后从同名的接收值中减去,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
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;