アクセス:更新クエリの一括変換方法

このQ&Aのポイント
  • アクセスの更新クエリを一括変換する方法について教えてください。
  • 番号をルールに基づき変換する更新クエリを作成しましたが、失敗しました。
  • どのような方法で一度に更新クエリを実行することができるのでしょうか?
回答を見る
  • ベストアンサー

アクセス:更新クエリ

このような番号があり、一桁ずつ分解しています(名称:データ)。 番号,1桁, 2桁, 3桁 A01, A, 0, 1 A02, A, 0, 2 B05, B, 0, 5 D06, D, 0, 6 これをルールに基づき下のように変換します。 番号,1桁, 2桁, 3桁 A01, 10, 0, 1 A02, 10, 0, 2 B05, 11, 0, 5 D06, 13, 0, 6 ルール(名称:コード) キャラクター, 値 0, 0 1, 1 2, 2 3, 3 4, 4 5, 5 6, 6 7, 7 8, 8 9, 9 A, 10 B, 11 C, 12 D, 13 これを更新クエリで一度にする方法を教えてください。 下のように組みましたが失敗しました。 UPDATE データ, コード SET [データ].[1桁] = [値], [データ].[2桁] = [値], [データ].[3桁] = [値] WHERE ((([データ].[1桁])=[キャラクター])) OR ((([データ].[2桁])=[キャラクター])) OR ((([データ].[3桁])=[キャラクター]));

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

  • ベストアンサー
回答No.2

クエリにルールを別名で3つ追加して結合して、更新クエリにします。 UPDATE ((データ LEFT JOIN ルール AS R1 ON [データ].[1桁] = R1.[キャラクター]) LEFT JOIN ルール AS R2 ON [データ].[2桁] = R2.[キャラクター]) LEFT JOIN ルール AS R3 ON [データ].[3桁] = R3.[キャラクター] SET [データ].[1桁] = [R1].[値], [データ].[2桁] = [R2].[値], [データ].[3桁] = [R3].[値]; あるいは、DLookupを使うとシンプルなSQLになります。 UPDATE データ SET [1桁] = DLookup("値","ルール","キャラクター='" & [1桁] & "'"), [2桁] = DLookup("値","ルール","キャラクター='" & [2桁] & "'"), [3桁] = DLookup("値","ルール","キャラクター='" & [3桁] & "'"); ルールが提示のもので固定なら、 UPDATE データ SET [1桁] = Val("&h" & [1桁]), [2桁] = Val("&h" & [2桁]), [3桁] = Val("&h" & [3桁]); なんて方法でも。(16進数→10進数変換)

ticktak
質問者

お礼

ありがとうございます。Dlookup昔使ったことが有りました。しばらく使っていなかったので存在を忘れておりました。 思った通り実行することが出来ました。 どうもありがとうございます。

その他の回答 (2)

  • chayamati
  • ベストアンサー率41% (254/607)
回答No.3

的外れなら御免 UPDATE データ INNER JOIN コード ON [データ].[1桁] = [コード].[キャラクタ] SET [データ].[1桁] = [値]; 如何でしょうか

ticktak
質問者

お礼

回答ありがとうございます。しかしこの方法だと一桁ずつ、三回同じことをしなければならないことになります。これを回避する方法を探しておりました。

noname#222886
noname#222886
回答No.1

データと称するものは 4つの項目からなるテーブルの状態であるのですか?

ticktak
質問者

補足

はい、そうです。 番号,1桁,2桁,3桁の四つのフィールドからなります。 本当に欲しいのはもっと桁数が多いのですが、3桁の番号に簡素化しております。

関連するQ&A

  • アクセス:Dlookup使用での更新クエリ

    以前↓で文字列を分解して、規則に従った番号に変換する方法を教わりました。 http://okwave.jp/qa/q9074794.html 今回は変換した値を合計して、あるフィールドに書き込むクエリの書き方を教えてください。 例えば、下のようにです。合計は10+0+1=11で計算しております。 番号,1桁,2桁,3桁,合計 A01,10,0,1,11 A02,10,0,2,12 実際は下のように、番号からルールを使って結果(合計)だけを書き込みたいです。 番号,合計 A01,11 A02,12 DLookup("値","ルール","キャラクター='" & [1桁] & "'")を”合計”というフィールドに更新させても値が表示されません(空欄)。 よろしくお願いします。

  • アクセス 2つのクエリーの集計について

    A: 選択クエリ|薬品コード|名称|数量|        | 001  |A  |1  | | 002  |B  |2  | | 003  |C  |3  | B: 選択クエリ|薬品コード|名称|数量|       | 001  |A  |1  | | 003  |C  |2  | | 004  |D  |3  | という2つのクエリから、 |     A   |    B |合計| |薬品コード|名称|数量|薬品コード|名称|数量| | | 001  |A  |1  | 001   |A |1  |2  |  | 002  |B  |2  | |  |  |2 |  | 003  |C  |3  | 003   |C |2  |5  |  |     |  |  | 004   |D  |3  |3  | というように、2つのクエリの結果も表示し、合計も表示 できるようなクエリの作り方を教えてください。 AとBの薬品コードを結合しても、両方の薬品コードを表示 できるような結合プロバディはないようにおもうのですが。 テーブルにしてからクエリにしないといけないのか、 そのあたりもわかりませんが教えてください。 よろしくお願いします。  質問内容書くときはうまくいっているのに、投稿だと線がずれているんですが、わかりますでしょうか?  

  • Access 選択クエリーの抽出条件

    Access2000を使っています。 選択クエリーの抽出条件にテーブルの値を設定することは可能でしょうか? たとえば、テーブルAに対して、抽出条件をテーブルBのデータでコード番号 ”B*”(コード番号にBのつくもの)を抽出したいのですが・・・。 よろしくお願いします。

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

    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

  • アクセスの更新クエリの質問です。

    ちなみにAccess2007を使用しています。 A,B,C,Dというフィールドが有り、AフィールドにはCodeが入っています。 Bフィールドには"bb"という言葉、Cフィールドには"cc"という言葉にそれぞれ書き換え、Aフィールドには、今から更新する1レコードを抽出するため、更新クエリ実行時に、パラメーターを入力するように設定しました。 しかし、更新するレコードは、全45000件中、6000件くらいあり、いちいちコードを入れるのが大変です。 もともと、書き換えるためのコードリストがエクセルデータとして有り、Accessにインポートすれば、コードリストをAccessのテーブルにする事も出来ます。このテーブルを使って簡単に、書き換えることは出来ないものなのでしょうか?

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

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

  • 更新クエリーについて

    更新クエリーについて教えて下さい。 元テーブルのAフィールドに値1,2,3 が入力されいます。それを 1を0 に 2を5 に 3を10に 更新する設定方法について教えてください。 <私が行った設定> 更新クエリーのレコードの更新欄に IIf ( [A] = 3 , 10, [A]) or IIf ( [A] = 2 , 5, [A]) or IIf ( [A] = 1 , 0, [A]) で実行したのですが、更新後の値が-1になります。  

  • access2003のクエリの条件指定について質問です

    コード(7桁)、単価、数量、金額、日付(年月日6桁表示)のテーブルと コード、部門コード(コードの上3桁)の選択クエリと 部門コード、部門名称のテーブルを結合して コード_部門(コードの上3桁)、コード_追番(コードの下4桁)、部門名称、単価、数量、金額、日付_年(日付の分割・2桁)、日付_月(日付の分割・2桁)、日付_日(日付の分割・2桁)、を他のテーブルに抽出する追加クエリを作成し、条件として部門コードに対応する部門名称が無い場合そのフィールドは空白でレコード自体は表示するようにしたいのですが、どうすれば良いのでしょうか? いくらやっても対応する部門名称が無い場合、抽出されずにレコード自体が表示されなくなってしまいます。 拙い文章で上手く内容が伝わらないかもしれませんが、どなたかご教授下さい。

  • クエリ・テーブルについて教えてください。

    access2003です。 作業番号・部コード・課コード・氏名を作業番号をキーに各テーブルから取り出すテーブル作成クエリを作成しました(名称:作業番号クエリ)。 新しく部コード・課コード・フラグ(1~9)のテーブルがあります。 「作業番号クエリ」のテーブルからフラグが3・4・6・7の部コードのみを取り出すテーブル作成クエリをつくりたいのです。 どのようにすればよいのでしょうか?抽出条件は3or4or6or7だと思うのですが、これ以外わかりません。教えてください。 作業番号 部コード 課コード 氏名 100010 001 2001 森田 100012 003 2004 森本 100018 002 2003 山本 100019 001 2002 山田 部コード 課コード フラグ 001 2001 1 001 2002 4 002 2003 3 003 2004 2 004 2005 4 005 2006 5 005 2007 6 005 2008 7 003 2009 8

  • Access クエリ

    INSERT INTO テーブルA SELECT * FROM テーブルB WHERE (フィールド1= 値を入力してください); 上記のような追加クエリがあります。 実行するとインプットボックスが表示されますが、 メッセージを改行して2行表示することは出来ませんか?

専門家に質問してみよう