Microsoft Access2002を使っています。

以下3つのSQL文があります。

UPDATE ファイル名 SET ファイル名.項目名1 = “A"
WHERE (((ファイル名.項目名2) Between "001" And "016"));

UPDATE ファイル名 SET ファイル名.項目名1 = "B"
WHERE (((ファイル名.項目名2) Between "069" And "072"));

UPDATE ファイル名 SET ファイル名.項目名1 = "C"
WHERE (((ファイル名.項目名2>="073"));

3つともレコードの更新ですが、それぞれ1つずつ実行しています。
3つ一度に実行させるには、どのようにSQL文を修正すればよいでしょうか。

回答の条件
  • 1人2回まで
  • 登録:2007/10/29 16:33:35
  • 終了:2007/11/05 18:02:58

回答(2件)

id:F-15X No.1

F-15X回答回数111ベストアンサー獲得回数132007/10/29 17:02:18

ポイント35pt

私としてはあまりお勧めしませんが、あえてやるなら次のようなSQLでしょうか。


UPDATE ファイル名 SET 

項目名1 = 

IIf(項目名2>="001" And 項目名2<="016", "A", 

    IIf(項目名2>="069" And 項目名2<="072", "B", 

        IIf(項目名2>="073" , "C", 項目名1)

    )

)

WHERE

    (項目名2 Between "001" And "016")

OR  (項目名2 Between "069" And "072")

OR  (項目名2 >= "073")

id:miku1973

ありがとうございます。

もし他もによい記述がありましたら、お待ちいたします。

2007/10/29 17:05:26
id:rikuzai No.2

りくっち回答回数1366ベストアンサー獲得回数1412007/10/29 17:05:45

ポイント35pt
UPDATE table_A SET table_A.Field_1 = 
	IIf(Val([Field_2])<=16,"A",
	IIf((Val([Field_2])>=69)*(Val([Field_2])<=72),"B",
	IIf(Val([Field_2])>=73,"C","")));

フィールド2に対して条件抽出するのでなく、

直接フィールド1に対してIIF文で書き込み処理を分岐してあげるのはどうでしょうか。

↑の文は

ファイル名=table_A

項目名1.2=Field_1.2

としてあります。


以上ご参考まで。

id:miku1973

ありがとう!

ちょっとやってみますね!

勉強になります。

2007/10/29 17:11:44
  • id:KUROX
    3つ一度に実行させる必然性は?
  • id:F-15X
    りくっちさんのだと、
    "017"~"068"
    が更新され、空文字になっちゃいますよ~ヾ(°∇°*)
  • id:rikuzai
    >F-15Xさん
    あ、そうか、新規フィールドとは限りませんものね。
    なら、
    UPDATE table_A SET table_A.Field_1 =
    IIf(Val([Field_2])<=16,"A",
    IIf((Val([Field_2])>=69)*(Val([Field_2])<=72),"B",
    IIf(Val([Field_2])>=73,"C",[Field_1])));
    としてもらった大丈夫かと。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません