我有以下数据 -
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?只是在思考。
答案 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
如果不是您需要的,请告诉我。