【发布时间】:2015-07-09 10:17:35
【问题描述】:
假设我有一张这样的桌子
Id Initial Value CardCount Total
1 5 1 null
1 0 2 null
1 0 4 null
2 10 0 null
2 0 3 null
2 0 1 null
我想将总列更新为上一行的“总”值 + 当前行的 cardCount 的总和。对于每个 Id 中的第一条记录,总数为 InitialValue + CardCount。我希望结果是这样的:
Id Initial Value CardCount Total
1 5 1 6
1 0 2 8
1 0 4 12
2 10 0 10
2 0 3 13
2 0 1 14
我试过了,但结果不正确
declare @tmp Table(Id int, InitialValue int, CardCount int, total int null)
Insert into @tmp values (1, 5, 1, null)
Insert into @tmp values (1, 0, 2, null)
Insert into @tmp values (1, 0, 4, null)
Insert into @tmp values (2, 10, 0, null)
Insert into @tmp values (2, 0, 3, null)
Insert into @tmp values (2, 0, 1, null)
Update @tmp Set Total = InitialValue + CardCount
;with TmpTb as(
select
ROW_NUMBER() over (order by ID) RNum, *
From
@tmp)
update c set Total= x.Total + CardCount
from TmpTb c join
(select a.RNum, a.ID, b.Total
From TmpTb a LEFT JOIN TmpTb b on a.RNum=b.RNum+1
where a.ID=b.ID )x on c.RNum>=x.RNum AND c.ID=x.ID
select * from @tmp
【问题讨论】:
-
您使用的是哪个版本的 SQL Server?您是否有任何明确的列要订购?
id的排序不是确定性的,因此不能用于确定地对行进行排序。 -
我使用的是 SQL 2014。抱歉忘了提。
-
好的,剩下第二个问题。我怎么知道 id=1 cardcount=1 应该在 id=1 cardcount=2 之前?是否有其他列决定行的顺序?
标签: sql-server tsql common-table-expression sql-server-2014