在MS Access中运行Total

时间:2014-09-05 13:47:20

标签: access-vba

我正在使用MS Access数据库,我想从表Tmp4生成每日股票报告,如下所示,

申__________ OpStk ___ PQty ___ SQty

2014年1月4日___ 120 _____ 0 _______ 4

2014年4月4日_____ 0 0 _____ _______ 2

2014年8月4日_____ 0 0 _____ _______ 1

2014年11月4日_____ 0 ____ 20 _______ 3

16/04/2014 _____ 0 0 _____ _______ 5

25/04/2014 _____ 0 ____ 10 _______ 3

注意: - 收盘股票=开仓股票+购买数量 - 销售数量

我使用了以下查询

'SELECT A1.DT, A1.OpStk, A1.PQty, A1.SQty,
(SELECT SUM(A2.OpStk+A2.PQty-SQty) FROM Tmp4 AS A2
WHERE A2.DT <=A1.DT) AS ClosingStk
FROM Tmp4 AS A1'

这给了我以下结果

申__________ OpStk ___ PQty ___ SQty ____ ClosingStk

2014年1月4日___ 120 _____ 0 _______ 4 _______ 116

2014年4月4日_____ 0 0 _____ _______ 2 _______ 114

2014年8月4日_____ 0 0 _____ _______ 1 _______ 113

2014年11月4日_____ 0 ____ 20 _______ 3 _______ 130

16/04/2014 _____ 0 0 _____ _______ 5 _______ 125

25/04/2014 _____ 0 ____ 10 _______ 3 _______ 132

我想要的每日股票报告如下,

申__________ OpStk ___ PQty ___ SQty ____ ClosingStk

2014年1月4日___ 120 _____ 0 _______ 4 _______ 116

2014年4月4日___ 116 _____ 0 _______ 2 _______ 114

2014年8月4日___ 114 _____ 0 _______ 1 _______ 113

2014年11月4日___ 113 ____ 20 _______ 3 _______ 130

16/04/2014 ___ 130 _____ 0 _______ 5 _______ 125

25/04/2014 ___ 125 ____ 10 _______ 3 _______ 132

谁能告诉我怎么样?

2 个答案:

答案 0 :(得分:0)

乍一看,我认为您可以用第一行的A1.OpStk代替较长版本,这相当于以前关闭的股票价格:

SELECT A1.DT, (SELECT SUM(A2.OpStk+A2.PQty-SQty) FROM Tmp4 AS A2 WHERE A2.DT <=A1.DT) AS OpStk, A1.PQty, A1.SQty,
(SELECT SUM(A2.OpStk+A2.PQty-SQty) FROM Tmp4 AS A2
WHERE A2.DT <=A1.DT) AS ClosingStk
FROM Tmp4 AS A1;

答案 1 :(得分:0)

感谢您的快速回复。您提供的查询结果略有不同。所以我将其修改为

SELECT A1.DT, (SELECT SUM(A2.OpStk+A2.PQty-A2.SQty) FROM Tmp4 AS A2 WHERE A2.DT < A1.DT) AS OpStk,
A1.PQty, A1.SQty,
(SELECT SUM(A2.OpStk+A2.PQty-A2.SQty) FROM Tmp4 AS A2
WHERE A2.DT <=A1.DT) AS ClosingStk
FROM Tmp4 AS A1;

这解决了它。非常感谢为我指路。