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
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。