如何使用SQL中的条件遍历嵌套行?

时间:2018-06-29 16:02:44

标签: sql while-loop

我想创建一个FOR循环的等效项。我在SQL中需要这个。我的目标是创建一个名为“差异”的新列,该列计算每行结束与下一行开始之间的日期差异(以天为单位)。本质上,我需要知道每个personID的合同是否有中断。从最小到最大的RowID定义了与特定组织的合同,例如与一个组织的每个新合同都以1开头。

我的桌子是:

table

我编写的SQL代码是:

select RowID, start_contract, end_contract from table

open the_cursor

fetch next from the_cursor into @id

while @@FETCH_STATUS = 0
begin 
    select
        DATEDIFF(DAY, (select end_contract from table where RowID = @id-1), 
                      (select start_contract from t where RowID = @id)) AS [Difference]

        if (select RowID from t) = 1
            break
        else 
            continue

    fetch next from the_cursor into @id
end

close the_cursor
deallocate the_cursor

但是我得到一个错误:

  

Cursorfetch:在INTO列表中声明的变量数量必须与所选列的数量匹配。

有人可以帮我吗?

非常感谢。

1 个答案:

答案 0 :(得分:1)

尝试一下:

select DATEDIFF(DAY, T.end_contract T.start_contract) AS [Difference], T.personID
from table T join table TT on TT.personID=t.personID
where TT.rowID = T.rowID + 1