- 締切済み
更新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
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- k_o_r_o_c_h_a_n
- ベストアンサー率55% (526/942)
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 ) こんな感じかな。テストしてないけど。