根据上一批次的最后一行更新批次行

时间:2016-06-10 06:32:55

标签: sql-server-2008 tsql

我有以下数据 -

create table #Test(
    Id int
    ,JobNo int
)

insert into #Test
values 
(1,100) ,(2,100)
,(3,101),(4,104)
,(5,105),(6,106)

我的要求是我需要按顺序更新批量行。说这里的批量大小是2,然后对于Id 3到4之间的行,我需要从第一批获取100的JobId值并将其增加到1.对于Id 5-6之间的行,我需要将JobId更新为102

预期产出是 -

Id,JobId
1,100
2,100
3,101
4,101
5,102
6,102

我能够使用while循环和计数器来实现这一点,但我只是想知道它是否可以通过分区和自连接来完成。我无法获得正确的分区标准,将它们分成相等的批次。即使我分区,我也不知道如何继续按顺序添加值。也许是一个递归的CTE?只是在思考。

1 个答案:

答案 0 :(得分:1)

试试这个:

UPDATE t_curr
SET JobNo = ISNULL(t_prev.JobNo + ((t_curr.Id - 1) / @batchSize), t_curr.JobNo)
FROM #Test t_curr
JOIN #Test t_prev ON t_prev.Id = t_curr.Id - @batchSize

如果不是您需要的,请告诉我。