我从mysql表中获取一些事务数据,如下所示:
SELECT bill_no as Document_No, bill_date as Trans_Date, bill_amount as Amount, 0 as Balance
FROM bill_table
WHERE consumer_name = 'John'
UNION
SELECT receipt_no as Document_No, receipt_date as Trans_Date, -receipt_amount as Amount, 0 as Balance
FROM receipt_table
WHERE consumer_name = 'John'
ORDER BY Trans_Date
结果是这样的
+-----------+----------+------+-------+ |Document_No|Order_date|Amount|Balance| +-----------+----------+------+-------+ |BILL58788 |2010-08-09|493 | 0 | |BILL58789 |2010-08-10|789 | 0 | |REC_12379 |2010-08-11|-1282 | 0 | |BILL58788 |2010-08-12|1493 | 0 | |BILL58788 |2010-09-01|4930 | 0 | |REC_12380 |2010-10-02|-2000 | 0 | +-----------+----------+------+-------+
这给了我所有账单&约翰的收据细节。所有金额都在同一列中,账单金额为正数&收据金额为负数。
在最后一栏'余额'中,我希望动态计算这样的总计连续数量:
+-----------+----------+------+-------+ |Document_No|Order_date|Amount|Balance| +-----------+----------+------+-------+ |BILL58788 |2010-08-09|493 | 493 | |BILL58789 |2010-08-10|789 | 1282 | |REC_12379 |2010-08-11|-1282 | 0 | |BILL58788 |2010-08-12|1493 | 1493 | |BILL58788 |2010-09-01|4930 | 6423 | |REC_12380 |2010-10-02|-2000 | 4423 | +-----------+----------+------+-------+
我知道我可以在获取数据后在PHP中完成此操作,但我想自己做mySQL。
有可能吗?请帮忙。 在此先感谢。
答案 0 :(得分:2)
在MySQL中,最简单的方法是使用变量:
select Document_No, bill_date, bill_amount,
(@balance := @balance + bill_amount) as balance
from ((SELECT bill_no as Document_No, bill_date as Trans_Date, bill_amount as Amount
FROM bill_table
WHERE consumer_name = 'John'
)
UNION ALL
(SELECT receipt_no as Document_No, receipt_date as Trans_Date, -receipt_amount as Amount
FROM receipt_table
WHERE consumer_name = 'John'
)
) t cross join
(select @balance := 0) const
ORDER BY Trans_Date;