首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据上一批的最后一行更新批量行

根据上一批的最后一行更新批量行
EN

Stack Overflow用户
提问于 2016-06-10 14:32:55
回答 1查看 69关注 0票数 2

我有以下数据-

代码语言:javascript
复制
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。

预期输出为-

代码语言:javascript
复制
Id,JobId
1,100
2,100
3,101
4,101
5,102
6,102

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

EN

回答 1

Stack Overflow用户

发布于 2016-06-10 14:47:53

试试这个:

代码语言:javascript
复制
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

如果这不是你需要的东西,请告诉我。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37741374

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档