アプリ版:「スタンプのみでお礼する」機能のリリースについて

<環境>SQLSERVER

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

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

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

A 回答 (2件)

SQLServer2005以降ならROW_NUMBERが使えます



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

参考URL:http://msdn.microsoft.com/ja-jp/library/ms186734 …

この回答への補足

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

補足日時:2011/06/28 09:29
    • good
    • 0

エラーどおりなので、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 行処理されました)
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す