我有三个桌子,
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
真的我无法解决这个问题,我们将不胜感激!
答案 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