同一レコード内のデータを指定して表示する方法

このQ&Aのポイント
  • 同一のレコードの中から特定のデータを表示するクエリを作成したい場合、指定個人名と個人名(1)~(4)の関連付けが必要です。
  • 現在のフィールドには指定個人名と個人名(1)~(4)があります。
  • 指定個人名の数字1から4を個人名(1)~(4)までのデータに関連付けて、新しいフィールドに呼び出す方法を教えてください。
回答を見る
  • ベストアンサー

アクセス;同じレコード内のデータを数字で指定して

あるクエリ上の、同一のレコードの中にある4つのデータ中から、一つを指定して、表示するクエリを作りたいのですが、どのようにすればよいのでしょうか。 現在、以下のようなフィールドです。 「指定個人名,個人名(1),個人名(2),個人名(3),個人名(4)」 「指定個人名」には半角数字の1から4までが任意で入ります。 「個人名(1)~(4)」のうちどれかを、「指定個人名」の数字で指定するとします。 「個人名(1)~(4)」のうち指定されたデータが、同一レコード内の新しいフィールドに表示されるようにしたいです。 しかしあるレコード内のデータを、同一レコード内の別のデータで指定するというやり方が思いつきません。 どうやって「指定個人名」の数字1~4を、「個人名(1)~(4)」までのデータと関連付けて、新しいフィールドに呼び出せば良いのでしょうか。 クエリ解説の本をひっくり返しましたが、どうも一般的な方法ではないようで、やり方が見つかりません。 初心者ゆえに質問の内容に不備があるかもしれませんが、訂正・補足いたしますので、ヒントだけでも結構です。 どうぞ教えてください。

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

  • ベストアンサー
  • tsubuyuki
  • ベストアンサー率45% (699/1545)
回答No.2

「一般的」がどういう処理なのかはわかりませんが、 IIF関数を重ねてやるのが一番早いでしょうね。  個人名: IIf([指定個人名]=1,[個人名1],IIf([指定個人名]=2,[個人名2],IIf([指定個人名]=3,[個人名3],IIf([指定個人名]=4,[個人名4],"Error")))) などですね。 フィールド名に「()括弧」などの記号は使わない方が良いと思いますよ。 式に入れたときに何が何だか分からなくなっちゃいますし、 思わぬ誤動作を招く可能性もありますから。

deeeeemo
質問者

お礼

ありがとうございました。希望した通りの結果になりました。助かりました。

その他の回答 (2)

  • ksd_hiro
  • ベストアンサー率76% (29/38)
回答No.3

>現在、以下のようなフィールドです。 >「指定個人名,個人名(1),個人名(2),個人名(3),個人名(4)」 >「指定個人名」には半角数字の1から4までが任意で入ります。 >「個人名(1)~(4)」のうちどれかを、「指定個人名」の数字で指定するとします。 >「個人名(1)~(4)」のうち指定されたデータが、同一レコード内の新しいフィールドに表示されるようにしたいです。 クエリのフィールドに Choose([指定個人名],[個人名(1)],[個人名(2)],[個人名(3)],[個人名(4)]) を入力します。

deeeeemo
質問者

お礼

ありがとうございました。機会があれば、このやり方を試したいと思います。

回答No.1

accessわかりません。caseを使います。 select 指定個人名, 個人名(1), 個人名(2), 個人名(3), 個人名(4), case 指定個人名 when 1 then 個人名(1) when 2 then 個人名(2) when 3 then 個人名(3) when 4 then 個人名(4) else 'error' end from table; ただ、accessにはcaseがないらしく、代わりにswitchやiifを使うようです。

関連するQ&A

  • ACCESS2003:2番目に大きい値を1レコードのみ抽出

    氏名、ポイントと2つのフィールドをもつテーブル1をもとにクエリ1を作成し、クエリデザインでDMax("[ポイント]","クエリ1","[ポイント]<=" & DMax("[ポイント]","クエリ1"))といった2番目に大きい値(1番目の値が2つ以上ある場合はその値で可)を抽出する式をつくりました。抽出条件に任意の氏名を指定した結果、2番目に大きい値は抽出できましたが、ポイントのデータ数ぶんだけ複数のレコードを表示してしまいます。できれば別のクエリを作成したりせずに、1つのレコードのみ表示させたいのですがどのようにしたらよいか分からず困っております。よろしくお願いします。

  • Accessのクエリでレコード追加

    Access初心者です。 バージョンは2010をつかっています。 テーブルを14テーブル含み、フィールド数が100ほどある選択クエリを作りました。 抽出条件などは設定していません。 このクエリで新しくデータを入力、レコードを追加し、上書き保存した後クエリを閉じます。 それからまた、そのクエリを開くとレコードが追加されていません。 テーブルにはその入力したデータは追加されています。 このクエリにもそのデータを追加表示させるためにはどうすればいいですか? 表示されない原因はなんなのかお教えお願いします。

  • アクセス2000でのレコード新規追加

    アクセス2000です。 社員名簿を毎年更新してIDを作成しています。 データはCSVでもらうので、エクセルで「固有ID」「フリガナ」「漢字氏名」「性別」「生年月日」フィールドを作成し、アクセスのテーブルにインポートします。 貰うデータは既存の社員、新入社員が混ざっています。 なので、新入社員だけを追加して、固有IDを割り付けたいと思います。 そこで、生年月日、性別、さらにフリガナの後ろ3文字をマッチング(結婚などによる改正に対応する)して、同じならば同一人物と判断し、追加しない、マッチングしなければ新規としてレコード追加、更にIDを自動的に入力したいのですが、どうすればよいでしょうか? 新規IDは半角でアルファベット1文字+9桁の数字にしたいです。 最大値+1でよいです。(例えば、現在使っているIDが[y900000001]ならば[y9000000002]を割り付ける。 名簿テーブルを作って、クエリを作成し、そのクエリに計算式フィールド「フリガナ2: Right([フリガナ],3)」を作成しフリガナの後ろ3文字を表示させる事はできましたが、今度はそのクエリから重複クエリで「フリガナ2」フィールドを重複項目に指定するとエラーが発生してしまいました。 「集計関数の一部として指定された式'Count(*)>And[性別]=[クエリ1].[性別]And[フリガナ2]=[クエリ].[フリガナ2]And[生年月日]='を含んでいないクエリを実行しようとしました。」 上記エラーです。 欲を言えば、生年月日、性別、フリガナ後ろ3文字がマッチしたデータは同一人物として判断し、名前に書き換えたいです。IDは変更しないです。 解決方法、宜しくお願いします。

  • Access Dcount関数で引数が指定できない

    ACCESSのVBAで社内システムを作っています。 Dcount関数の引数1であるフィールド名を指定すると、下記のようなエラーが出てしまいます。 「クエリ式'Count(2A)'の 構文エラー:演算子がありません。」 色々切り分けして以下のような法則を見つけました。 ・フィールド名が数字のみの場合→使用できる ・フィールド名の先頭が数字以外の場合→使用できる ・フィールド名の先頭が数字(全半角共に)の場合→エラー発生 全社システムからACCESSにインポートするデータのフィールド名が「2A」「3A」などの商品コードになっているためこのまま使用したいのですが、手段はありますでしょうか。 ■使用しているツール Microsoft Office Access 2007 よろしくお願いします。

  • アクセスのクエリでレコード削除ができません。

    アクセス超初心者です。 テーブルを商品コードでくっつけて、クエリのデザインビューで表示しました。 いらないレコードを削除しようとしたところ、できません。 くっつける前の、テーブルではできますが、クエリで実行させ、レコードを削除しようとしたところできません。 どうしたらよいのか教えてください。 あと、もうひとつ、クエリで、出力したいフィールド名をドラッグしたあと、削除したいときには、どうすればよいでしょうか? 表示しないなら、できるのですが・・・。削除がわかりません。 よろしくお願いいたします。

  • Accessデータ並べ替えをハイブリッドにしたい

    [使用しているツール] Access 2007 PROFFESSONAL [やっていること(現状)] 1つのテーブルで複数のクエリ(複数のフィールドの並べ替えが必要な為)と複数(クエリと同数)のフォームを作成して、フォームの数だけコマンドボタンを作成してフォームを一覧表示で開いています。 [やりたいこと] 1つのテーブルで「1つのクエリ」による複数のフィールド(名)を切替えて、「1つのフォーム」で表示(一覧)させたいと思っています。 例えば、テーブル名:顧客名簿(取引先、県名、商品名、入庫日)、クエリ名:顧客名簿クエリ、フォーム名:顧客名簿一覧としたとき、(取引先、県名、商品名、入庫日)をコンボボックス等で切り替えることで、指定したフィールド(名)で並び替えられたデータを「フォーム名:顧客名簿一覧」に表示させられないでしょう。 [考えたこと] コンボボックス(名前:コンボ1)を作成し値集合ソースに「”取引先”;”県名”・・・・。」と入力、クエリ「顧客名簿クエリ」の抽出条件欄にビルダを起動させて「・・・コンボ1」を指定、フォーム「顧客名簿一覧」のレコードソースにクエリ「顧客名簿クエリ」を選択しました。しかし、フォーム「顧客名簿一覧」を開いても、データは抽出できずデータなしの表示で先へ進めていません。 以上ですが、宜しくお願いします。

  • Access リレーションシップ データ型について

    リレーションシップとクエリ内部結合の違いについて リレーションシップとクエリ内部結合(リレーションシップ)の違いは参照結合性や連鎖更新、連鎖消去設定の差だけでしょうか? データ型のオートナンバーは一度使用した番号はレコードデータを消去しても、二度と使えないのでしょうか? 任意の番号に指定しようすると、オートナンバー型のIDフィールドに連結されているため編集できません となります。

  • フォームのレコードソース(Access2000)

    質問させていただきます。 フォームの「レコードソース」でテーブルとクエリーのほかに、「SELECT テーブル名、フィールド名・・・」というのがあります。これもクエリーなのでしょうか? ちなみに、レコードソースの右にある「---」をクリックすると「SQLステートメント:クエリビルダ」というものが開きます(クエリー画面と同じ?)。 また、フォームのレコードソースはテーブル、クエリー、SOLステートメントのどれにすれば良いのでしょうか?

  • ACCESS2000でのレコード抽出

    OS:WindowsXP ACCESS2000 あるフィールドの値が最大となるようなレコードを選択クエリで 抽出しようとしているのですがうまくいきません。 テーブルのフィールドは4個あります。 テーブル [系列] [優先度] [データ1] [データ2] ここで各系列ごとに優先度が最大となるレコードのみを 抽出したいのです。 系列、データ1、データ2は重複がありえます。 優先度は系列を跨いだ重複はありますが、 同系列内での重複はありません。 レコードの例) 1:系列A 優先度1 データA データB 2:系列A 優先度2 データC データD 3:系列B 優先度1 データE データF 上記の例で言いますと、レコード2:とレコード3:のみを 抽出するクエリを作成したいのです。 集計クエリで優先度のフィールドを「最大」にしても、 3つのデータ全てが抽出されてしまいます。 どなたか解決策をご教示ください。

  • クエリーで、全角混じりデータの抽出[access95]

    半角で入力すべきフィールドの中に全角文字が混在している時に、 この全角文字が混在しているデータを、クエリーで抽出する方法を 教えてください。 データ型はテキストで、フィールド長は50です。 また入力されているデータは、任意<50文字とないっています。

専門家に質問してみよう