在Server 2008 R2中,我有一个如下表:
ID Dates Count
1 03-02-2014 2
2 04-02-2014 1
3 05-02-2014 NULL
4 06-02-2014 1
5 07-02-2014 3
6 08-02-2014 NULL
7 09-02-2014 2
8 10-02-2014 NULL
9 11-02-2014 1
10 12-02-2014 3
11 13-02-2014 NULL
12 14-02-2014 1
我有一个INT变量,它有一些值,例如@XCount = 15。
我的要求是用(@XCount )更新count列,例如上一条记录的结果将被下一条记录中的Count值减去。
结果:
ID Dates Count
1 03-02-2014 13 (15-2)
2 04-02-2014 12 (13-1)
3 05-02-2014 12 (12-0)
4 06-02-2014 11 (12-1)
5 07-02-2014 8 (11-3)
6 08-02-2014 8 (8-0)
7 09-02-2014 6 (8-2)
8 10-02-2014 6 (6-0)
9 11-02-2014 5 (6-1)
10 12-02-2014 2 (5-3)
11 13-02-2014 2 (2-0)
12 14-02-2014 1 (2-1)
我不愿意用游标作为解决方案。有人能帮我吗?
发布于 2014-02-19 19:51:23
不如像这样
DECLARE @XCount INT = 15
;WITH Vals AS(
SELECT ID, Dates, [Count] OriginalCount, @XCount - ISNULL([COUNT],0) NewCount
FROM Table1
WHERE ID = 1
UNION ALL
SELECT t.ID, t.Dates, t.[Count], v.NewCount - ISNULL(t.[Count],0)
FROM Table1 t INNER JOIN Vals v ON t.ID = v.ID + 1
)
SELECT *
FROM Vals
演示
请注意,这是一个递归查询,有时(直到技术允许,比如SQLserver2012 LAG
或Running totals
) O尔德才能工作。
https://stackoverflow.com/questions/21890677
复制相似问题