我有以下数据-
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之间的行,我需要从第一批处理中获取JobId值100并将其递增到1。同样,对于Id 5-6之间的行,我需要将JobId更新为102。
预期输出为-
Id,JobId
1,100
2,100
3,101
4,101
5,102
6,102我可以使用while循环和计数器来实现这一点,但我只是想知道是否可以通过分区和自连接来实现。我不能得到正确的划分标准来将它们分成相等的批次。即使我进行分区,我也不知道如何按顺序将这些值相加。也许是一个递归的CTE?只是在思考。
发布于 2016-06-10 14:47:53
试试这个:
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如果这不是你需要的东西,请告诉我。
https://stackoverflow.com/questions/37741374
复制相似问题