你可以用相关的子查询来做到这一点。更改AND it.No <= ot.No
到AND it.Date <= ot.Date
如果No
s为不连续的:
DECLARE @t TABLE
(
No INT ,
Employee CHAR(4) ,
Model CHAR(4) ,
Date DATE ,
Bill CHAR(3) ,
Income MONEY ,
Outcome MONEY
)
INSERT INTO @t
VALUES (1, 'emp1', 'hp', '20140101', '000', 100, 0),
(2, 'emp1', 'dell', '20140101', '000', 100, 0),
(3, 'emp1', 'hp', '20140308', '111', 0, 40),
(4, 'emp3', 'hp', '20140308', '111', 40, 0),
(5, 'emp3', 'hp', '20140408', '222', 0, 20),
(6, 'emp2', 'hp', '20140408', '222', 20, 0),
(7, 'emp1', 'hp', '20140608', '333', 0, 5),
(8, 'emp2', 'hp', '20140608', '333', 5, 0),
(9, 'emp1', 'dell', '20150101', '444', 0, 40)
SELECT * ,
(SELECT SUM(Income - Outcome)
FROM @t it
WHERE it.Model = ot.Model
AND it.Employee = ot.Employee
AND it.No <= ot.No
) AS Result
FROM @t ot
输出:
No Employee Model Date Bill Income Outcome Result
1 emp1 hp 2014-01-01 000 100.00 0.00 100.00
2 emp1 dell 2014-01-01 000 100.00 0.00 100.00
3 emp1 hp 2014-03-08 111 0.00 40.00 60.00
4 emp3 hp 2014-03-08 111 40.00 0.00 40.00
5 emp3 hp 2014-04-08 222 0.00 20.00 20.00
6 emp2 hp 2014-04-08 222 20.00 0.00 20.00
7 emp1 hp 2014-06-08 333 0.00 5.00 55.00
8 emp2 hp 2014-06-08 333 5.00 0.00 25.00
9 emp1 dell 2015-01-01 444 0.00 40.00 60.00
能否请您编辑您的问题,并发布表中的文本,以便我们可以使用它? – StuartLC 2015-04-06 08:03:26
听起来就像一个跑步总数。如果是这样的话,可以提供很多例子。 – 2015-04-06 08:08:35