【问题标题】:Update on non duplicate records in sql server更新 sql server 中的非重复记录
【发布时间】:2012-03-10 10:46:44
【问题描述】:

我有一张有 4 列的表格,如下所示

var1    var2    var3    ran
a       a       a       1
b       a       a       2
c       a       a       3
d       b       b       4
e       c       c       1

这里根据 var2 和 var3 列中的值,将其视为重复项。第 4 列是重复项的行号。我需要重新初始化非重复记录的行号(更新)。

预期结果将是(注意d b b 4 变成了d b b 1):

var1    var2    var3    ran
a       a       a       1
b       a       a       2
c       a       a       3
d       b       b       1
e       c       c       1

【问题讨论】:

    标签: sql sql-server


    【解决方案1】:
    declare @T table
    (
      var1 char(1),
      var2 char(1),
      var3 char(1),
      ran int
    )
    
    insert into @T values
    ('a', 'a', 'a', 1),
    ('b', 'a', 'a', 2),
    ('c', 'a', 'a', 3),
    ('d', 'b', 'b', 4),
    ('e', 'c', 'c', 1)
    
    ;with C as
    (
      select ran,
             row_number() over(partition by var2, var3 order by var1) as rn
      from @T
    )
    update C 
    set ran = rn
    
    select *
    from @T
    

    结果:

    var1 var2 var3 ran
    ---- ---- ---- -----------
    a    a    a    1
    b    a    a    2
    c    a    a    3
    d    b    b    1
    e    c    c    1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多