• ベストアンサー

SET句内で複数の条件を指定してUPDATEする方法

SQLに関しまして質問させて頂きます。 テーブルAがあり、以下のような条件を一つの SQL文で実現したいと思っています。 【条件】 (1)e列が1のものを対象に更新をかける (2)条件(1)を満たすレコードのf列の値をsysdateで更新する (3)条件(1)を満たすレコードのdの値に関しては  「bが岡山 かつ cが男 であれば dを030へ更新し、   そうでなければ dの値は更新しない」こととする 【テーブルA】 ------------------------------------------- a b c d e f 1 愛媛 男 010 1 2/5 2 岡山 男 050 1 1/30 3 岡山 女 020 0 1/12 ------------------------------------------- 条件(3)が「bが岡山」といったように一つであれば ------------------------------------------- UPDATE A SET d = decode(b,'岡山','030',d),   f = sysdate WHERE e = 1 ------------------------------------------- といったようにdecode関数を使用して実現できるのですが、 「bが岡山 かつ cが男」というように条件(3)が 二つの条件によって構成されている場合、 どうすれば良いか分かりません。 decode関数で複数の条件を指定することが出来ればいいのですが・・。 以上、ご存知の方がいらしましたら、 ご教授よろしくお願い致しますm(_ _)m 【環境】 oracle 9i

  • Oracle
  • 回答数2
  • ありがとう数4

質問者が選んだベストアンサー

  • ベストアンサー
  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.2

9iなら#1の方のとおりcase使えますけど、decodeでも出来ますよ。 d = decode(b,'岡山',decode(c,'男','030',d),d)

mito-nattou
質問者

お礼

ご回答ありがとうございますm(__)m なるほど、EXCELのIF文みたいに 入れ子に出来るのですね。 勉強になりました!

その他の回答 (1)

回答No.1

こんにちは。 DECODEじゃなくて、CASEを使えばいいですよ。 CASEのWHEN句に、複数条件をANDで指定します。 (^^ゞ

mito-nattou
質問者

お礼

ご回答ありがとうございますm(__)m 9iからはdecodeの替わりにcaseが使えるみたいですね。

関連するQ&A

  • エクセル 複数条件でのLOOKUP

    エクセルで、特定のキーで別表を参照してそこから値を表示するにはVLOOKUPを使用すると思いますが、複数条件でLOOKUPする事は可能でしょうか。 例えば、 シート1のA列とD列 シート2のB列とF列  2つの条件に合う(シート1A列=シート2B列 and シート1D列=シート2F列)レコードをシート2のG列からシート1のE列に表示したいと言う場合です。  シート1   A B C D E           1 01 ** ** 01       2 01 ** ** 02 うう       3 05 ** ** 01 ああ          ↑  シート2   A B C D E F G          1 ** 08 ** ** ** 01 いい       2 ** 01 ** ** ** 02 うう       3 ** 05 ** ** ** 01 ああ 判りにくい説明で申し訳ありませんが、よろしくお願いいたします。

  • UPDATE 副問合せで複数のフィールドを一度に更新したい

    tabelA key |fld1|fld2|fld3 001 |0 |10 |A 002 |0 |11 |B 003 |0 |12 |C 004 |0 |13 |D 005 |0 |14 |E tabelB key |fld1|fld2|fld3 001 |2 |10 |A 002 |0 |11 |B 003 |0 |22 |C 004 |0 |13 |X 005 |0 |14 |E -結果- tabelA key |fld1|fld2|fld3 001 |2 |10 |A 002 |0 |11 |B 003 |0 |22 |C 004 |0 |13 |X 005 |0 |14 |E tabelAとtabelBを比較して tabelBのfld1~fld3のいずれかが違うレコード (key=001,003,004)だけ tabelAをUPDATEし、tabelBと同じ値にしたい。 1fldでも変更があれば、全fld更新します。 fldごとにはできたのですが 全フィールドをまとめて更新することができません。 使用DB:SQL Server2000、2005 宜しくお願いします。

  • 関数 複数条件での検索を【&】を使わない別の方法

    エクセル関数を使って複数の条件を満たしたときの 特定のセルの数値を返す方法が分かりません。 同じような質問が過去にはありました。ご回答の式は =INDEX(C2:C8,MATCH(D2&E2,INDEX(A2:A8&B2:B8,),0))でした。 大半はこれでいけるのですが、1ッ問題が、、式中「&」で数値をつなげてしまうと 下図で「11」-「1」と「1」-「11」が共に「111」となり、おかしなことに なってしまいます。(11-6・1-16も同じことになります) 例を挙げると    A..............B..............C...................D...............E ..........F   1.......11..............1.............100................1...............11...........200 2.......10............ 4..............120...............11...............1...........100 3.........1..............11........... 200..............10...............4............120 4.........3...............5..............500................1...............16..........700 5.........1.............16..............700 6........13..............1..............650 7........11..............6..............800 上のような表のときに D-1に「1」  E-1に「11」という2つの条件を 満たしたときのF列に200を返すということをやりたいのです。 上記にも書きましたが =INDEX(C2:C8,MATCH(D2&E2,INDEX(A2:A8&B2:B8,),0))の式に いろいろ手を加えてみましたが、とても答えが見つかりませんでしたので なにかいい方法がありましたらご伝授ください。 よろしくお願いします。

  • ある条件での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で取得したいのですが どちらの場合でも取得の方法に悩んでいます。 どのような方法で取得できるのでしょうか?

  • updateで複数行更新したい

    OracleのSQLについて質問があります。 UPDATE文を1度しか使わずに、抽出条件の異なるデータを複数個更新することは可能ですが? 例えば、 テーブル名:TEST カラム: A B C D UPDATE A B C D 100 010 350 300 → 100 010 200 250 100 020 350 000 → 100 020 200 280 という感じで更新したいのですが、どんなUPDATE文を組み立てればいいのか思いつきません。 なので、何かきっかけになるようなことでも構いませんので、教えてください。 よろしくお願いします。

  • 条件1つで複数の値を抽出することはできませんか。

    エクセルのことなのですが、条件1つで複数の値を抽出してきたいと思っています。 しかし、様々な本やインターネットのサイトを参照したのですがうまくできません。 内容なのですが、「シート1」というシートがありこのシートを「シート2」のように番号で分けて、横に並べるようなシートを作りたいと思っています。 シート1 番号 品目 100 A 100 B 101 C 101 D 101 E 101 F 101 G 101 H 101 I 102 J 103 K 103 L シート2 番号 品目 100 A B 101 C D E F G H I 102 J 103 K L すみませんが教えていただけないでしょうか。 よろしくお願いします。

  • エクセルで複数の条件指定

    エクセルで複数の条件を指定して別のシートにその件数を入力したいのですが どのようにすればいいですか? A B   C   D   E 1 法人  愛知  5/8 3000 1 個人  三重  6/2 3000 2 法人  三重 4/7 4000 3 個人  愛知  4/7 2000 こんな感じの表で Dが6/1までで Aが1・B法人・C愛知の件数、 Aが1・B法人・E3000以上の件数 で表を作りたいのですがどうすればいいですか? 検索したのですがうまく出来なくて・・・。 シートを変えると無理なのでしょうか?   

  • Access2003 複雑な条件のデータ抽出

    ☆1つのテーブルで、フィールド[A]~[C]があり、文字および英数字のデータが混在しています。 (ただし、フィールド[C]には、空欄(Null)になっている場合があります) =========================================================== (テーブル(1)) No  [A]      [B]    [C]     [D]      [E]      [F] 1   111      X    あ       2   222      X     か   3   333      X     さ  4   111      Y    た 5   222      Y   (Null)  6   333      Y     は 7   222      Z     ま   8   333      Z     や  9   111      Z    ら    =========================================================== [課題] (1) テーブル(1)のフィールド[A]の値を参照し、「111」の場合は、   フィールド[C]の値を[D]へ抽出する([B]でグループ化) (2) 同様に、フィールド[A]の値を参照し、「222」の場合は、   フィールド[C]の値を[E]へ抽出する([B]でグループ化) (3) 同様に、フィールド[A]の値を参照し、「333」の場合は、   フィールド[C]の値を[F]へ抽出する([B]でグループ化) (4) 新規クエリにて、上記課題(1)~(3)の条件を指定して実行すると    以下の抽出結果が表示される =========================================================== [抽出結果] (テーブル(2)) No  [B]    [D]    [E]      [F] 1   X     あ    か      さ     2   Y     た   (Null)    は   3   Z     ら    ま     や =========================================================== 別々のレコードにあるフィールド[C]の値を、条件に従い テーブル(2)のように1つのレコードにまとめたいのです。  大変恐縮ですが、私はSQLが書けないので、フィールド欄へ関数式を 入力して条件を指定しております。 できましたら、各フィールドへ入力する関数式を教えていただけると助かります。 また、関数だけでは出来ない場合は、SQLで教えていただければ幸いでございます。 お手数お掛けしますが、何とぞ宜しくお願い致します。

  • 複数の行を集約するSQLについて

    以下のテーブルのレコードをもとに A B C 1| あ | あ | 1 | 2| あ | い | 1 | 3| あ | う | 1 | 4| う | あ | 1 | 5| え | あ | 1 | 6| あ | あ | 2 | 7| あ | い | 2 | 8| あ | う | 2 | 9| う | あ | 2 | 以下のテーブルを作成したいと考えています。 A B C D E 1| あ | あ | 1 | あ | - | 2| あ | い | 1 | い | - | 3| あ | う | 1 | う | あ | 4| え | あ | 1 | - | え | 5| あ | あ | 2 | あ | - | 6| あ | い | 2 | い | - | 7| あ | う | 2 | う | あ | (1)カラムCを1つのグループとします。 (2)その中でカラムAの値が「あ」の場合は、カラムBの値をカラムDに設定する。 (3)カラムAの値が「あ」ではない場合は、カラムBの値をカラムEに設定する。 (4)カラムAの値とカラムBの値を入替えると同じ場合は(例では上の表の3と4、8と9のレコード)、 カラムAの値が「あ」でない方のレコード(4と9のレコード)のカラムBの値をカラムEに設定する。 (5)(4)で値を設定した方のレコードを削除する。 どのようなSQLを作成すればできるのでしょうか? SQLに詳しい方がいらっしゃれば、ご教授をお願います

  • エクセルで複数の条件をカウントする方法を教えてください

    下記の表で、C~E列の(1)~(10)だけ数えて("休"以外)、出席欄(F列)にいれたいです。    A   B    C     D     E      F 1     名前  6/15   6/29   7/6     出席 2  1  AAA   (1)    (2)    (3)   (ここに答え) 3  2  BBB   休    (5)    (6)   (ここに答え) 4  3  CCC   (8)    休    (9)   (ここに答え) COUNTIFだと複数の条件ができないようで、ほかの知識がないので困ってしまいました。 よろしくお願いいたします。