SQLServer2008です。
<<実現したいこと>>
・data_table.noがnullの場合、no_table.noの数値を取得し、
data_table.noに連番で振っていく。
番号を振る順はdata_table.cdの昇順とする。
・no_tableにはdata_table.noの最大値を更新する。
<<現在>>
テーブルdata_table
cd(主) no
ーーーーーーーー
A1 null
A3 null
A2 null
A4 9999
ソートテーブルsort_table
cd(主) sort
ーーーーーーーー
A1 1
A3 2
A2 3
A4 4
テーブルno_table
no
ーーー
10000
<<実現したいデータ>>
テーブルdata_table
cd(主) no
ーーーーーーーー
A1 10001
A3 10002
A2 10003
A4 9999
ソートテーブルsort_table
変更なし
テーブルno_table
no
ーーー
10003
自分なりに作ってみたのですが、「サブクエリは複数の値を返しました。サブクエリが =、!=、<、<=、>、>= の後に続く場合や、サブクエリが 1 つの式として使われる場合は複数の値は許可されません。」
のエラーが出て上手く行きません。
かといってサブクエリで使っている data_tableを外すと全て10001で更新されて上手く行きません。
初歩的な質問ですが宜しくお願いします。
UPDATE data_table SET data_table.no =
(SELECT
no_table.no + ROW_NUMBER() OVER(ORDER BY sort_table.sort)
FROM data_table,no_table,sort_table WHERE data_table.cd = sort_table.cd AND data_table.no IS NULL
)
FROM
data_table,no_table,sort_table
WHERE data_table.cd = sort_table.cd AND data_table.no IS NULL;
UPDATE no_table SET no = (SELECT MAX(no) FROM data_table);
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。