You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server按lotno分组更新TrackingNumber为最大值逐次加1问题

SQL Server 分组递增值更新方案

要实现同LotNO分组统一赋值、不同组按全局最大值依次递增的需求,可以使用SQL Server支持的可更新CTE(公用表表达式)实现,具体语句如下:

WITH GlobalMax AS (
    -- 先获取表中当前TrackingNumber的全局最大值
    SELECT MAX(TrackingNumber) AS MaxTrack FROM TEST.DBO.J_CordToolARCCutSheetPlanning
),
LotGroup AS (
    -- 给需要更新的LotNO分配递增序号,同LotNO序号一致
    SELECT 
        j.LotNO,
        -- DENSE_RANK保证同组序号相同,不同组连续递增
        gm.MaxTrack + DENSE_RANK() OVER(ORDER BY j.LotNO) AS NewTrack
    FROM TEST.DBO.J_CordToolARCCutSheetPlanning j
    CROSS JOIN GlobalMax gm
    WHERE j.JobNumber = '1234' AND j.TrackingNumber = 0
    GROUP BY j.LotNO, gm.MaxTrack
)
UPDATE t
SET t.TrackingNumber = lg.NewTrack
FROM TEST.DBO.J_CordToolARCCutSheetPlanning t
INNER JOIN LotGroup lg ON t.LotNO = lg.LotNO
WHERE t.JobNumber = '1234' AND t.TrackingNumber = 0

语句逻辑说明

  • 第一层CTEGlobalMax查询获得当前表TrackingNumber的全局最大值,示例中该值为5
  • 第二层CTELotGroup筛选出作业1234中TrackingNumber为0的记录,按LotNO分组后用DENSE_RANK()窗口函数给每个不同的LotNO分配连续的递增序号,同LotNO序号一致,再叠加全局最大值得到每组要更新的目标值
  • 最后通过关联更新将目标值写入原表,保证同LotNO的记录TrackingNumber取值一致,不同组依次递增
    示例数据执行上述语句后,即可得到期望的更新结果。

内容的提问来源于stack exchange,提问作者PeteyN.O

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 23:54:00