【问题标题】:TSQL - Auto Increment in an UPDATE statementTSQL - UPDATE 语句中的自动增量
【发布时间】:2011-10-20 21:54:18
【问题描述】:

SQL Server 2005

我有一个包含以下内容的表格:-

[order_id]     [index_1]
600020001      0
600020002      0
600020002      0
600020002      0
600020003      0
...

需要更新为:-

[order_id]     [index_1]
600020001      1
600020002      1
600020002      2
600020002      3
600020003      1  

按照上面的示例,我正在尝试编写一个将填充 index_1 字段的 UPDATE 语句。我可以使用 CURSOR 来实现这一点,但如果可能的话,最好不要这样做。

对于每个新的 order_id,编号都会重新开始。对于每个 order_id 行,index_1 字段递增 1。

没有光标可以做到这一点吗?

【问题讨论】:

    标签: sql tsql cursor sql-update increment


    【解决方案1】:

    您可以使用CTErow_number() 来做您想做的事。下面代码中的表格@T仅用于演示。将 @T 替换为您的表的名称。

    declare @T table ([order_id] int, [index_1] int)
    
    insert into @T values
    (600020001,      0),
    (600020002,      0),
    (600020002,      0),
    (600020002,      0),
    (600020003,      0)
    
    ;with cte as
    (
      select index_1,
             row_number() over(partition by order_id order by (select 1)) as rn
      from @T       
    )
    update cte 
      set index_1 = rn
    
    select *
    from @T
    

    结果:

    order_id    index_1
    ----------- -----------
    600020001   1
    600020002   1
    600020002   2
    600020002   3
    600020003   1
    

    【讨论】:

    • +1 用于使用row_number() over(partition by..)。在这里像手套一样合身。
    • 谢谢。完全实现了我想要它做的事情。
    猜你喜欢
    • 2011-03-28
    • 2019-05-21
    • 2021-03-24
    • 2018-06-24
    • 1970-01-01
    • 2019-04-19
    • 2016-01-26
    • 2013-08-15
    • 1970-01-01
    相关资源
    最近更新 更多