2

別の列に従ってIDを増やしてSQLサーバーを更新するにはどうすればよいですか?

次の構造のテーブルがあります。

sn  name    val
    test     0
    test     0.5
    test     2
    test1    0
    test1    0.5
    test1     2

次のように更新するにはどうすればよいですか。

sn  name      val
1    test      0
2    test      0.5
3    test      2
1    test1     0
2    test1     0.5
3    test1     2

フィドル

4

3 に答える 3

2

cte と row_number を使用する

例を次に示します。

create table #mytable (sn int, name varchar(20), val money)

insert into #mytable values (null, 'test', 0.5)
insert into #mytable values (null, 'test', 1)
insert into #mytable values (null, 'test1', 0.5)
insert into #mytable values (null, 'test1', 1)

;with cte as (select row_number() over (order by name, val) as rn, * from #mytable)
update cte set sn = rn

select * from #mytable
于 2013-10-30T08:36:40.260 に答える
1

テーブルにキー列がある場合、これはRow_Number()を使用して簡単に実行できます。列を追加しました:そして、ここに更新があります:OVER ... PARTITION BYId int identity primary key

;with RowNumberedData as (
  select 
    id, 
    row_number() over (
      partition by name
      order by id
    ) as rowno
  from sql_test
)
update s
  set sn = r.rowno
from sql_test s
join RowNumberedData r
  on s.id = r.id;

SQLFiddle: http://sqlfiddle.com/#!3/43fa8/4

于 2013-10-30T08:44:40.163 に答える