• ベストアンサー

Access 更新クエリについて

Access365で顧客データを管理しようとしています。 「T_更新履歴」の情報を「T_顧客情報」へ更新クエリを用いて更新させたいです。 「T_更新履歴」には今回更新されたデータのみが入っており、更新のない項目については空白状態です。 例) 顧客ID/顧客名/電話番号/住所…    /   /00-0000-0000/…  今回は電話番号に更新があった為、電話番号のみが入力され、他項目は空白 こういったテーブルの場合、空白項目は更新せず、入力のある項目、今回の例では電話番号のみを更新するといった動きが理想なのですが、更新クエリで可能でしょうか。 ちなみに、毎月100件以上のデータ変更(更新)があり、「T_更新履歴」にはExcelデータを取り込んでデータを蓄積しています。 Accessをよく分かっておらず恐縮ですが、お知恵をお借りできると幸いです。 どうぞよろしくお願いいたします。

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

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率66% (1719/2589)
回答No.3

SwitchじゃなくてIIfで短くいけました。 UPDATE T_顧客情報 INNER JOIN T_更新履歴 ON T_顧客情報.顧客ID = T_更新履歴.顧客ID SET T_顧客情報.顧客名 = IIf([T_更新履歴]![顧客名] Is Null,T_顧客情報.顧客名,[T_更新履歴]![顧客名]), T_顧客情報.電話番号 = IIf([T_更新履歴]![電話番号] Is Null,T_顧客情報.電話番号,[T_更新履歴]![電話番号]); デザインモードのレコードの更新 IIf([T_更新履歴]![顧客名] Is Null,T_顧客情報.顧客名,[T_更新履歴]![顧客名]) IIf([T_更新履歴]![電話番号] Is Null,T_顧客情報.電話番号,[T_更新履歴]![電話番号])

katatsumuri33
質問者

お礼

的確なアドバイスをくださりありがとうございます。ご教授いただいた通りに入力したところ、無事想定通りに動いてくれました(住所や氏名項目だけ=""としました)。数日悩んでおりましたのでとっても助かりました! 本当にありがとうございました。

Powered by GRATICA

その他の回答 (3)

回答No.4

VBAで処理する方が正確にできると思います。 Excelの更新履歴を取込む際に、入力項目がある顧客情報のみ更新するようにすればよいのかと思います。 ただそうすると、空白に更新したい時に出来ないと思います。 項目数が少ないのであれば1つの項目のみを条件に更新するような 更新クエリを作成すればシンプルに更新クエリを作成できると思います。 例)入力がある項目のみを抽出し一致するレコードの項目のみ更新 住所差分更新クエリ 電話番号差分更新クエリ 名前更新クエリ ①クエリを起動してT_更新履歴とT_顧客情報を選択し  2つをキーで繋ぐようにする ②条件に住所なら住所<>"" ③更新クエリにして更新項目をT_更新履歴.住所→T_顧客情報.住所 これを項目数の数分作成する 一番楽で正確なのはVBAを使う事と思いますがハードル高くなってしまうので少し手間ですが更新クエリを必要な項目の数分作成して実行するのが良さそうに思います。

  • kkkkkm
  • ベストアンサー率66% (1719/2589)
回答No.2

SWITCHで切り替えるとどうでしょう。 顧客名と電話番号だけの例です。 UPDATE T_顧客情報 INNER JOIN T_更新履歴 ON T_顧客情報.顧客ID = T_更新履歴.顧客ID SET T_顧客情報.顧客名 = SWITCH( [T_更新履歴]![顧客名] IS NULL, T_顧客情報.顧客名 ,[T_更新履歴]![顧客名] IS NOT NULL, [T_更新履歴]![顧客名]) , T_顧客情報.電話番号 = SWITCH( [T_更新履歴]![電話番号] IS NULL, T_顧客情報.電話番号 ,[T_更新履歴]![電話番号] IS NOT NULL, [T_更新履歴]![電話番号]) ; デザインモードでしたら 顧客名のフィールドのレコードの更新に Switch([T_更新履歴]![顧客名] Is Null,T_顧客情報.顧客名,[T_更新履歴]![顧客名] Is Not Null,[T_更新履歴]![顧客名]) 電話番号のフィールドのレコードの更新に Switch([T_更新履歴]![電話番号] Is Null,T_顧客情報.電話番号,[T_更新履歴]![電話番号] Is Not Null,[T_更新履歴]![電話番号])

  • kkkkkm
  • ベストアンサー率66% (1719/2589)
回答No.1

電話番号だけの情報でどのレコードを更新するのか分からないと思うのですが、単に追加じゃないですよね。

katatsumuri33
質問者

補足

ご回答ありがとうございます。 また、質問内容に間違いがあり大変失礼いたしまた。 顧客IDで二つのテーブルを紐づけている為、正しくは以下のとおりです。 顧客ID/顧客名/電話番号/住所… 顧客ID/   /00-0000-0000/… この状態で更新を実行すると、電話番号以外の項目はクリアされてしまいます。 入力項目のみを更新したいのですが、可能でしょうか。

関連するQ&A