我有一个250行的表,这是结构
week | number | Valued | removed | status
----- -------------------------------------------------------------
1 | 68 | 68 | 272 | 68
2 | 400 | 196 | 784 | 196
对于第1周,数字等于状态和值,
'removed'= 'valued' * 3
第2周,
Valued = [current week's number] - [previous week's "removed"] + [previous week's "status"]
以及随后几周的相同计算。
我需要根据前几周的值逐行计算解决方案。
答案 0 :(得分:1)
我认为你的表结构中没有“Valued”列,它是select语句的计算列,然后
Declare @test Table([week] int, [number] int, [removed] int, [status] int)
Insert into @test Values
(1, 68, 272, 68),
(2, 400, 784, 196)
;with cteTest(rowNum, [week], number, removed, status, valued)
As
(
Select top 1 cast(2 as int), [week], number, removed, status, number
from @test order by [week]
Union All
Select a.rowNum+1, a.week, a.number, a.removed, a.status, a.number-b.removed+b.status
From (select rowNum = cast(ROW_NUMBER() over(order by [week]) as int) , [week],
number, removed, status from @test) a
inner join cteTest b on a.rowNum = b.rowNum
)
Select week, number, removed, status, valued from cteTest
答案 1 :(得分:0)
您可以使用以下查询获取值
SELECT t1.number - t2.removed + t2.status as valued
FROM table1 t1
INNER JOIN table1 t2 ON t1.week = t2.week+1
如果您需要更新查询来更新valued
列,可以使用:
UPDATE table1
SET table1.valued = table1.number - t2.removed + t2.status
FROM table1
INNER JOIN table1 t2 ON table1.week = t2.week+1