在SQL 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)
我不愿意使用游标作为解决方案。有人可以帮帮我吗?
答案 0 :(得分:0)
像
这样的东西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
请注意这是一个递归查询,有时(直到技术允许它,例如SQL SERVER 2012 LAG
或Running totals
)旧的确实有效。