こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

SQLSERVER 連番更新について

<環境>SQLSERVER

一時ワークテーブルのフィールドに指定した番号以降の連番を更新したいのですが、
クエリーで更新する方法はありますか?

例)
<更新前のテーブル>
コード 名前  連番 
001  AAA  null
002  BBB  null
003  CCC  null

<更新後のテーブル> 15以降の連番を更新する
コード 名前  連番 
001  AAA   15
002  BBB   16
003  CCC   17

投稿日時 - 2011-06-28 00:36:29

QNo.6839872

すぐに回答ほしいです

質問者が選んだベストアンサー

SQLServer2005以降ならROW_NUMBERが使えます

---
UPDATE Table
SET 連番 = ROW_NUMBER() OVER(ORDER BY コード) + 14
FROM Table

参考URL:http://msdn.microsoft.com/ja-jp/library/ms186734(v=sql.90).aspx

投稿日時 - 2011-06-28 08:56:18

補足

ROW_NUMBER() OVER(ORDER BY コード) + 14
で連番は取得できたのですが、
「ウィンドウ関数は、SELECT 句または ORDER BY 句だけで使用できます。」
とエラーが出ます。
これはどうすればよいのでしょうか?

投稿日時 - 2011-06-28 09:29:12

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

-広告-
-広告-

回答(2)

ANo.2

エラーどおりなので、Selectした結果とジョインして更新をかけます。
※この場合、コードが一意にならないと駄目です。

create table test
(
コード varchar(10),
名前 varchar(10),
連番 int
);

insert into test values('001','AAA',null);
insert into test values('002','BBB',null);
insert into test values('003','CCC',null);

select * from test;

UPDATE test
SET test.連番 = b.NewNo
FROM test
inner join (
select コード, (ROW_NUMBER() OVER(ORDER BY コード) + 14) as NewNo
FROM test) as b
on test.コード = b.コード
;

select * from test;

(1 行処理されました)

(1 行処理されました)

(1 行処理されました)
コード 名前 連番
---------- ---------- -----------
001 AAA NULL
002 BBB NULL
003 CCC NULL

(3 行処理されました)

(3 行処理されました)

コード 名前 連番
---------- ---------- -----------
001 AAA 15
002 BBB 16
003 CCC 17

(3 行処理されました)

投稿日時 - 2011-06-28 10:23:39

-広告-
-広告-

あなたにオススメの質問

-広告-
-広告-