Sql server 我可以使用SQL游标从上一行检索值吗?

Sql server 我可以使用SQL游标从上一行检索值吗?,sql-server,cursor,Sql Server,Cursor,我正在开发一个查询,其中我需要当前行的某个字段是“当前行的字段”+“前一行的相同字段”的结果。(SQL Server 2008) 如何使用游标执行此操作?将前一行值指定给变量: declare @previosvalue varchar(100) = null; declare @currentvalue varchar(100); declare crs cursor for select value from table; open crs; fetch next from crs in

我正在开发一个查询,其中我需要当前行的某个字段是“当前行的字段”+“前一行的相同字段”的结果。(SQL Server 2008)


如何使用游标执行此操作?

将前一行值指定给变量:

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;

这是使用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
;

我相信在SQLServer2008中可以使用FetchPreor…请参阅

给我们一些示例数据和表格模式,它很可能可以用CTE和排名函数来完成…CTE不是更优雅一点吗…?@gbn:我希望
LEAD
LAG
支持,我自己如果你能在面向CTE的集合中完成,是的,它会更优雅。OP特别是关于
CURSOR
的。此外,
CURSOR
s并不是人们常说的魔鬼……非常感谢,我刚刚开始学习CURSOR是如何工作的,你的例子真的帮助了我!我也感谢所有其他的答案@Kira:请注意,除非游标的SELECT中存在明确的
ORDER BY
子句,否则“PREVICE”的值将是未定义的。对不起,我对CTEs一无所知。。。但很快我就会开始了解它是如何工作的。非常感谢。