原数据
编号 序号
1001 2
1001 3
1001 4
1001 5
1001 9
1003 3
1003 5
1003 8
1006 2
1006 3
1006 4
1006 5
1006 6
1008 3
1008 4
1008 5
1008 6
变成
编号 序号
1001 1
1001 3
1001 4
1001 5
1001 9
1003 1
1003 5
1003 8
1006 1
1006 3
1006 4
1006 5
1006 6
1008 1
1008 4
1008 5
1008 6或者变成
编号 序号
1001 1
1001 2
1001 3
1001 4
1001 5
1003 1
1003 2
1003 3
1006 1
1006 2
1006 3
1006 4
1006 5
1008 1
1008 2
1008 3
1008 4
如何编程实现,请大家帮帮忙!谢谢大家了!

解决方案 »

  1.   

    按lz的意思,第一种情况:按序号排列把第一个序号变为1
    use tempdb;
    /*
    create table tb
    (
    编号 int not null,
    序号 int not null
    );
    insert into tb(编号,序号)
    values
    (1001,2),
    (1001,3),
    (1001,4),
    (1001,5),
    (1001,9),
    (1003,3),
    (1003,5),
    (1003,8),
    (1006,2),
    (1006,3),
    (1006,4),
    (1006,5),
    (1006,6),
    (1008,3),
    (1008,4),
    (1008,5),
    (1008,6);
    */
    select
    t.编号,
    (case when t.sort = 1 then 1 else t.序号 end) as [序号]
    from
    (
    select tb.编号,tb.序号,
    ROW_NUMBER() over(partition by tb.编号 order by tb.编号) as [sort]
    from tb
    ) as t;
      

  2.   

    按lz的意思,第二种情况:按序号排列从1开始重新编号
    use tempdb;
    /*
    create table tb
    (
    编号 int not null,
    序号 int not null
    );
    insert into tb(编号,序号)
    values
    (1001,2),
    (1001,3),
    (1001,4),
    (1001,5),
    (1001,9),
    (1003,3),
    (1003,5),
    (1003,8),
    (1006,2),
    (1006,3),
    (1006,4),
    (1006,5),
    (1006,6),
    (1008,3),
    (1008,4),
    (1008,5),
    (1008,6);
    */
    select tb.编号,
    ROW_NUMBER() over(partition by tb.编号 order by tb.编号) as [序号]
    from tb;
      

  3.   

    update 
      a
    set
      序号=b.序号
    from
      tb a,
      (select 编号,row_number()over(partition by 编号 order by 编号) as 序号 from tb)b
    where
      a.编号=b.编号
      

  4.   


    create table test
    (num int,
     rank int)
     go
     
     insert into test
     values
     (1001, 2),
    (1001, 3),
    (1001, 4),
    (1001, 5),
    (1001, 9),
    (1003, 3),
    (1003, 5),
    (1003, 8),
    (1006, 2),
    (1006, 3),
    (1006, 4),
    (1006, 5),
    (1006, 6),
    (1008, 3),
    (1008, 4),
    (1008, 5),
    (1008, 6)--第一种情况
    select num,
    (case 
    when t.rank = (select min(a.rank) from test a where a.num = t.num) then 1
    else t.rank
    end)
    from test t--第二种情况
    select num,
    rank() over (partition by num order by rank) as 'Rank'
    from test