• 締切済み

更新SQLの書き方

次のテーブルW、Yがあります。 テーブルYの内容をテーブルWに更新するSQLを教えてください。 カーソル処理はNG、DBはORACLE9です。 よろしくお願いいたします。 更新方法は、 (1)コードAで結合する (2)テーブルYのコードB以上の値を持つ、テーブルWのレコードを更新する (3)テーブルWの更新先項目は、コードBの値に対応した数とする  (例 (1)Y.コードB=11 なら、W.コードB=11~の項目「数11」を更新する    (2)Y.コードB=15 なら、W.コードB=15~の項目「数15」を更新する) 【更新前】 ■テーブルY(更新元) コードA コードB 数 AAA    11    20 AAA    15    26 ■テーブルW(更新先) コードA コードB 日にち 数11 数12 数13 数14 数15 AAA    11    20060703 0 0 0 0 65 AAA    12    20060710 0 0 0 0 65 AAA    13    20060718 0 0 0 0 65 AAA    14    20060724 0 0 0 0 65 AAA    15    20060731 0 0 0 0 0 ↓ ↓ ↓ 【更新後】 テーブルW コードA コードB 日にち 数11 数12 数13 数14 数15 AAA    11    20060703 20 0 0 0 65 AAA    12    20060710 20 0 0 0 65 AAA    13    20060718 20 0 0 0 65 AAA    14    20060724 20 0 0 0 65 AAA    15    20060731 20 0 0 0 26 テーブルY(更新元)を「横持ち」にしておくと楽になるでしょうか? ■テーブルY(更新元) コードA コードB 数11 数12 数13 数14 数15 AAA    11    20 0 0 0 0 AAA    15    0 0 0 0 26

みんなの回答

回答No.1

update W set (数11,数12,数13,数14,数15)=( select sum(decode(Y.コードB,11,数,0)), sum(decode(Y.コードB,12,数,0)), sum(decode(Y.コードB,13,数,0)), sum(decode(Y.コードB,14,数,0)), sum(decode(Y.コードB,15,数,0)) from Y where W.コードA=Y.コードA and W.コードB>=Y.コードB ) こんな感じかな。テストしてないけど。

関連するQ&A