在sql server中逐行

时间:2013-11-22 05:09:22

标签: sql sql-server row

我有一个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"]

以及随后几周的相同计算。

我需要根据前几周的值逐行计算解决方案。

2 个答案:

答案 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