2013-11-22 5 views
0

У меня есть таблица с 250 строками, здесь структурапо строкам в SQL Server

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

что такое «СУБД»? 'mySQL',' MSSQL', 'Postgre' и т. д.? – Edper

ответ

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 
1

я предположил, что у вас нет Столбец «Знак» в вашей структуре таблицы и это вычисленный столбец для выписки, затем

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 
Смежные вопросы