- ベストアンサー
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
- mito-nattou
- お礼率100% (5/5)
- Oracle
- 回答数2
- ありがとう数4
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
9iなら#1の方のとおりcase使えますけど、decodeでも出来ますよ。 d = decode(b,'岡山',decode(c,'男','030',d),d)
その他の回答 (1)
- taka451213
- ベストアンサー率47% (436/922)
こんにちは。 DECODEじゃなくて、CASEを使えばいいですよ。 CASEのWHEN句に、複数条件をANDで指定します。 (^^ゞ
お礼
ご回答ありがとうございます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 宜しくお願いします。
- 締切済み
- SQL Server
- 関数 複数条件での検索を【&】を使わない別の方法
エクセル関数を使って複数の条件を満たしたときの 特定のセルの数値を返す方法が分かりません。 同じような質問が過去にはありました。ご回答の式は =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で取得したいのですが どちらの場合でも取得の方法に悩んでいます。 どのような方法で取得できるのでしょうか?
- ベストアンサー
- Oracle
- 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文を組み立てればいいのか思いつきません。 なので、何かきっかけになるようなことでも構いませんので、教えてください。 よろしくお願いします。
- ベストアンサー
- Oracle
- 条件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で教えていただければ幸いでございます。 お手数お掛けしますが、何とぞ宜しくお願い致します。
- ベストアンサー
- その他MS Office製品
- 複数の行を集約する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に詳しい方がいらっしゃれば、ご教授をお願います
- 締切済み
- Oracle
- エクセルで複数の条件をカウントする方法を教えてください
下記の表で、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だと複数の条件ができないようで、ほかの知識がないので困ってしまいました。 よろしくお願いいたします。
- ベストアンサー
- Windows XP
お礼
ご回答ありがとうございますm(__)m なるほど、EXCELのIF文みたいに 入れ子に出来るのですね。 勉強になりました!