• 締切済み

更新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

  • m1234
  • お礼率51% (19/37)
  • Oracle
  • 回答数1
  • ありがとう数0

みんなの回答

回答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

  • 片方だけ抽出する方法(SQL)

    下記のようなテーブルがあるとします。 Aテーブル コード 値 X 10 Y 20 Z 30 Bテーブル コード 値 Y 20 Y 30 Z 30 A.コード=B.コードとA.値=B.値という条件に一致しないデータのうち、 Aテーブルのデータのみ取り出したいです。 この場合だと、「X 10」のみ結果として欲しいです。 どのようなSQLを作成すればいいか、分かりません。 考え方の問題なのかもしれませんが、ぜひ教えてください。

  • SQLでの更新クエリに関する質問

    テーブルAの社員数の値をテーブルBの対応したIDの社員数の値で更新したいのですが、どのようなSQL文を書けばいいのでしょうか? テーブルA ID 会社名 資本金 社員数 1 ○×株式会社 1000万 70 2 △△株式会社 1億2000万 320 3 □□□株式会社 3000万 170 4 ○○△商事 1500万 34 テーブルB ID 社員数 2 337 3 175 例としてあげたので少ないレコード数ですが、実際はテーブルAのレコード数は数万件とあり、それに対するテーブルBのレコード数も数千件とあります。

  • SQLについて教えてください

    お世話になります。 SQLについて教えてください AテーブルとBテーブルからCテーブルを作成したいのですが、 KEYをキーにAテーブルのIDが1で、YYMMが一番新しい項目(最大の項目)を 取得し、Cテーブル作成したいのですが、どのようにするのでしょうか? Aテーブル    Bテーブル   Cテーブル KEY ID yymm   KEY     KEY YYMM AAA 0 200612  AAA     AAA 200611 AAA 1 200611  BBB     BBB 200611 AAA 1 200609 BBB 0 200611 CCC 1 200611

  • こんなSQLを教えてください

    こんなSQLを教えてください <更新前> テーブル1 |キー|コード| | 1|  a| | 2|  b| | 3|  c| テーブル2 |キー|コード| | 2|  B| | 4|  D| <更新後> テーブル1 |キー|コード| | 1|  a| | 2|  B| | 3|  c| こんなふうに テーブル1と同じデータがテーブル2にあったら テーブル1を書き換えるUPDATE文を教えてください

  • SQLを教えてください。

    以下に5つのテーブルがあるとします。 (1)全体テーブル  ・登録順番号(Key)  ・登録名 (2)商品テーブル  ・項目コード(Key)  ・品名コード(Key)  ・商品登録順番号(Key)  ・商品サイズ(Key)  ・品名 (3)商品単価テーブル  ・項目コード(Key)  ・品名コード(Key)  ・商品登録順番号(Key)  ・商品サイズ(Key)  ・登録順番号(Key)  ・商品単価 (4)新_商品単価テーブル  ・項目コード(Key)  ・品名コード(Key(Key))  ・商品登録順番号  ・商品サイズ(Key)  ・登録順番号(Key)  ・新_商品単価 (5)詳細テーブル  ・登録順番号(Key)  ・品名コード(Key)  ・原価項目コード(Key)  ・商品数量A  ・商品数量B 上記のテーブルから、以下の条件に合致する「(1)の登録名」「(2)の品名」「(4)の新_商品単価×(5)の商品数量※」を取得したい。 ※商品数量Bに値があれば商品数量Bを、値がなければ商品数量A 【条件1】全てAND条件 新_商品単価テーブルの項目コードが100  新_商品単価テーブルの品名コードが50 新_商品単価テーブルの新_商品単価×詳細テーブルの商品数量※<0 商品単価テーブルの商品単価×詳細テーブルの商品数量※>0 ※商品数量Bに値があれば商品数量Bを、値がなければ商品数量A 上記で抽出出来るレコードに加えて、以下 【条件2】全てAND条件 新_商品単価テーブルの項目コードが200~300あるいは400~500 新_商品単価テーブルの新_商品単価×詳細テーブルの商品数量※=0 商品単価テーブルの商品単価×詳細テーブルの商品数量※>0 ※商品数量Bに値があれば商品数量Bを、値がなければ商品数量A どのようなSQLで抽出できますでしょうか?? DBはAccessです。

  • SQLについての質問です

    SQLの質問です。(Oracle) 二つのテーブル T1, T2 に、それぞれ三つのカラム A, B, C があり、A, B の値が同じである行においてT1のCからT2のCへ値をコピーするSQLを教えてほしいです。 以下、そのデータ例です。 テーブル T1 A B C --------- 1 AAA 10 2 BBB 20 3 CCC 30 テーブル T2 A B C --------- 1 AAA 0 2 XXX 0 4 YYY 0 この場合、結果としてテーブル T2は1行目だけがカラム Cの値がT1からコピーされ A B C --------- 1 AAA 10 2 XXX 0 4 YYY 0 としたいです。

  • クエリでのデータ更新について

    ACCESS2000で更新クエリの質問です。 フィールドの値の合計、カウントなどの集計値を計算するクエリから取り出された値を、更新クエリでデータを更新したいのですが、 「更新可能なクエリでありません」とエラーがでます。 LOOPする方法もあるのですが、できればクエリで一括更新したいと思います。 どなたかご教授お願いします。 やりたいことは下記のとおりです。Aテーブルを集計しBテーブルの個数にAテーブルの個数の合計値を更新する。 <Aテーブル> コード  個数 1     1 1     2 1     3 2     4 2     4 3     5 3     6 <Bテーブル> コード  個数 1      2      3    ↓↓↓更新後 <結果:Bテーブル>   コード  個数 1     6 2     8 3     11

  • SQLを教えてください。

    テーブルAとテーブルBは1:Nの関係です。 取得したい値が上手く取れないため、テーブルAにテーブルBのJOINを2回実行して取得している為、パフォーマンスが悪いです。 1回で取得する方法、もしくはパフォーマンスが良い方法があれば教えてください。 ■テーブルA(PKはa1) a1 001 002 003 ■テーブルB(PKはb1,b2,b3) b1  b2  b3   b4 001  1   3   aaa 001  1   2   bbb 001  1   1   ccc 001  2   3   ddd 001  2   1   eee 002  1   1   fff 002  2   3   ggg 002  2   2   hhh ■取得したい結果 a1   b4-1    b4-2 001    aaa    ddd 002    fff     ggg

  • ある条件でのSQLの取得方法について

    以下の条件でのSQLのデータの取得方法が分かりません。 2つのテーブルがあるとします。 ・テーブルA キー   項目1 10     X 20     Y ・テーブルB キー  項目2  項目3 10     5    C 10     6    D 12     6    E ここで取得する条件として ■テーブルAにあるのは、必ず取得します。 ■テーブルAのキーとテーブルBのキーは繋がり、繋がったテーブルBの情報は  別レコードとして取得します。 ■テーブルAのキー1つに対して、テーブルBのキーは無いかも知れないし、  複数件あるかも知れません。  無い場合はテーブルAの情報のみを出力し、複数件ある場合はその全てを出力します。 ■テーブルBの項目2が同じ値のデータがある場合、テーブルBを出力したレコードと  同じレコードに、項目2が同じデータの情報を出力します。  項目2が同じデータが無い場合はこの情報は出力しません。  項目2が同じ値のデータは最大2件しかありません。 上記の例の場合に出力したい結果 ・出力テーブルC キー  フラグ   項目1  項目2  項目3   項目2が同じキー  項目2が同じ値 10  テーブルA   X 10  テーブルB         5    C 10  テーブルB         6    D        12            E 20  テーブルA   Y (テーブルC のフラグとは、テーブルAの情報かテーブルBの情報かを示します) これを出来ればSQL、出来なければPL/SQLで取得したいのですが どちらの場合でも取得の方法に悩んでいます。 どのような方法で取得できるのでしょうか?

  • テーブル間の更新クエリにおいて

    Access2010で入力フォームを作成しています。 一時データとしてテーブルAを連結サブフォームとして編集します。保存ボタンをクリックするとメインのテーブルB(Aとフィールド構成は同じ)へA、Bのフィールド間で値が異なる場合、上書き保存をするという更新クエリを用意しています。 質問はテーブルAでフォーム上、オプショングループのラジオボタン(項目はテキスト型 値リストは0と1)に設定した項目が初期値のnullから入力したデータがメインのテーブルBに更新できないので困ってます。 連結フォームなので、テーブルAに値が入っており且つBと値が異なるのはデータビューで確認しています。ただ更新クエリでの選択(データビュー)に載ってこない。 この項目がテーブルBに反映されるのは予めインポートで0もしくは1が入力されていた状態から変更した場合と他の項目も合わせて値に変更があった場合のみでした。 クエリの抽出条件はテーブルA.項目<>テーブルB.項目としています。他の項目もor条件で同じ設定にしています。切り分けのため、このオプショングループの項目だけを変更した場合のクエリにしても反映はされませんでした。 考慮すべき点あればご教示ください。 よろしくお願いいたします。 どうかお助けくださいませm(__)m