Могу ли я получить значение из предыдущей строки, используя CURSORs SQL? - PullRequest
2 голосов
/ 27 июля 2010

Я разрабатываю запрос, где мне нужно, чтобы определенное поле моей текущей строки было результатом "поля моей текущей строки" + "того же поля предыдущей строки".(SQL Server 2008)

Как это сделать с помощью курсоров?

Ответы [ 3 ]

5 голосов
/ 27 июля 2010

Присвойте предыдущему значению строки переменную:

declare @previosvalue varchar(100) = null;
declare @currentvalue varchar(100);

declare crs cursor for select value from table;
open crs;

fetch next from crs into @currentvalue;
while @@fetch_status = 0
begin
   -- process here. On first row, @previousvalue is NULL
   -- as it should be, since there is no 'previous' of first

   select ... from sometable
   where somecondition = @currentvalue
   and othercondition = @previousvalue;

   set @previousvalue = @currentvalue;
   fetch next from crs into @currentvalue;
end

close crs;
deallocate crs;
1 голос
/ 27 июля 2010

Будет ли это подходящим решением с использованием CTE?

WITH MyCTE AS
    (SELECT ROW_NUMBER() OVER (ORDER BY col1) AS Sequence, Col1, Col2
    FROM Table1)

SELECT c1.Sequence, c1.Col1 AS Prev_Co1,
    c2.Col1 AS Cur_Col1, c1.Col2 AS Prev_Col2, c2.Col2 AS Cur_Col2,
    COALESCE(c1.Col2, 0) + COALESCE(c2.Col2, 0) AS Sum_Col2
FROM MyCTE AS c1
LEFT OUTER JOIN MyCTE AS c2 ON c1.Sequence = c2.Sequence + 1
;
0 голосов
/ 23 декабря 2018

Я верю, что FETCH PRIOR доступен в SQLServer 2008 .... См. эта страница MS

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...