创建余额列

时间:2019-01-16 08:54:26

标签: mysql

我有三个桌子, t_PRODS (ID, NAME, OLD_QTY)t_INS (ID, PROVIDER_NAME, PRODUCT_ID, QTY)t_OUTS (ID, DEPLOYER_NAME, PRODUCT_ID, QTE),然后将它们与UNION ALL结合在一起以全部显示,其中两列用于QTY,第一列用于QTY_IN,另一列用于QTE_OUT

SELECT 'Old quantity' AS OPERATION, ID, OLD_QTY AS Q_IN, NULL AS Q_OUT FROM t_PRODS
UNION ALL
SELECT PROVIDER_NAME, PRODUCT_ID, QTY, NULL FROM t_INS
UNION ALL
SELECT DEPLOYER_NAME, PRODUCT_ID, NULL, QTY FROM t_OUTS

我的问题是我想显示另一列这样的余额:

OPERATION        ID    Q_IN     Q_OUT     **BALANCE**
Old quantity     1     2        NULL      2
PROVIDER_1       1     20       NULL      22
PROVIDER_2       3     6        NULL      28
DEPLOYER_1       1     NULL     3         25
DEPLOYER_1       1     NULL     6         19
PROVIDER_2       4     5        NULL      24
PROVIDER_3       2     6        NULL      30
DEPLOYER_2       2     NULL     12        18
DEPLOYER_3       4     NULL     7         11

真的我无法解决这个问题,我们将不胜感激!

2 个答案:

答案 0 :(得分:0)

SELECT 'Old quantity' AS OPERATION, ID, OLD_QTY AS Q_IN, NULL AS Q_OUT, BALACNE = 'BALANCE (of previous record) + Q_IN (of current record) - Q_OUT (of current record)' FROM t_PRODS
UNION ALL
SELECT PROVIDER_NAME, PRODUCT_ID, QTY, NULL, NULL FROM t_INS
UNION ALL
SELECT DEPLOYER_NAME, PRODUCT_ID, NULL,NULL, QTY FROM t_OUTS

注意:请确保将'BALANCE (of previous record) + Q_IN (of current record) - Q_OUT (of current record)'替换为用来计算余额的值的列

答案 1 :(得分:0)

最后,我解决了!!!

SET @BALANCE:= 0;
SELECT A.*, @balance:=@balance + IFNULL(A.Q_IN, 0) - IFNULL(A.Q_OUT, 0)
from
(
(SELECT 'Old quantity' AS OPERATION, ID, OLD_QTY AS Q_IN, NULL AS Q_OUT FROM t_PRODS)
union all
(SELECT PROVIDER_NAME, PRODUCT_ID, QTY, NULL FROM t_INS)
union all
(SELECT 'Old quantity' AS OPERATION, ID, OLD_QTY AS Q_IN, NULL AS Q_OUT FROM t_PRODS)
) AS A