Accessデータベースでの抽出条件の作成に困っています

このQ&Aのポイント
  • Access2003で町内会のデータベースを作成しており、家族構成による対象者の抽出条件を設定するのに困っています。
  • 各世帯を1レコードとし、家族名と生年月日をフィールドにしています。しかし、家族1と家族2のフィールドに対象者が混ざってしまい、正しく抽出できません。
  • 家族1、家族2のフィールドから対象者のみを抽出するには、どのような条件式を設定すれば良いでしょうか?夏休みのイベント案内のために早急に解決したいと思っています。
回答を見る
  • ベストアンサー

Accessの抽出条件がうまく作れず困っています

Access2003で、町内会のデータベースを作っています。 各世帯を1レコードとし、家族名と生年月日をそれぞれフィールドにしています。 (例:家族1,家族1の生年月日、家族2、家族2の生年月日・・・) 子ども会の対象者を生年月日をもとにクエリで抽出しようとしています。 家族構成によって、家族1、家族2などの各フィールドに対象者が混ざっているため、クエリの「または」欄を使い、各生年月日フィールドの抽出条件に「>#2002/04/01#」と入力したところ、家族1は非対象者でも、家族2が対象者の場合、家族1の名前が抽出データに入ってしまい困っています。 (世帯によっては家族1に対象者がいるため表示になっているからで当然すよね…) 家族1、家族2の各フィールドの純粋に対象者のみ抽出するには、どのような条件式を入力すればいいでしょうか? 夏休みのイベント案内のため、早急にやらねばならず本当に困っています。 お知恵を拝借いたしたく、どうかお願いいたします。

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

  • ベストアンサー
  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.3

No.1の方が言われている通り、本当はテーブルの修正をお勧めするところ なのですが・・・現状のテーブルで対応する場合は、「ユニオンクエリ」を 使用します。 但し、ユニオンクエリは  ・デザインビューで作成・編集することはできない  ・データは表示専用になり、クエリ上からの修正はできない ので、ご注意下さい。 作成方法は以下の通り: 1)新規クエリをデザインビューで開く 2)『テーブルの表示』ダイアログは、特に追加はせずにそのまま閉じる 3)メニューで「表示(V)→SQL ビュー(Q)」を選択する 4)表示されている「SELECT;」を削除した上で、以下のようなSQL文を記述  (「氏名1」等が記録されているテーブル名が「世帯一覧」の場合):  ※「氏名3」等がある場合は、「氏名2」と同様に「Union ~ Between ~ And ~」   という行を追加します。なお、「;」は一番最後の行だけにつけます。 Select [氏名1] As 該当者 From [世帯一覧] Where [生年月日1] Between #2003/02/01# Union Select [氏名2] From [世帯一覧] Where [生年月日2] Between #2003/02/01#; 5)クエリを保存して閉じる ・・・以上です。 なお、  ・「As 該当者」は、該当した氏名1・氏名2を表示する際の名前の指定  ・フィールド名(氏名1など)やテーブル名以外は、必ず半角で入力する必要あり です。

omame2525
質問者

お礼

DexMachinaさま ユニオンクエリは初めて知りました。 手順まで詳しくお教えいただきありがとうございます。 やってみましたら、欲しかったデータのリストアップができました! 後々のことを考えると、やはりテーブルは要素ごとに細かく分けて、リレーションシップするのがいいんですね。 本当にありがとうございました!!

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

例を挙げてないので、質問のしたいことがはっきりしないが 例データ 始めの2フィールドが家族1その後が家族2のデータとする。 ID 氏名1 生年月日1 氏名2 生年月日2 1 吉田 一郎 2001/02/03 吉田 健二 2003/01/05 2 鈴木 太郎 2005/01/02 鈴木 純一 2003/02/01 3 田中 清 2003/02/02 田中 惠子 2005/03/05 4 木村 浩二 2002/03/02 下村 明 2004/03/04 クエリのデザイングリッド 生年月日1 Between #2003/02/01# And #2003/02/28# 生年月日2 Between #2003/02/01# And #2003/02/28# ただし行をずらして「または」の行へ入れる。 結果 ID 氏名1 生年月日1 氏名2 生年月日2 2 鈴木 太郎 2005/01/02 鈴木 純一 2003/02/01 3 田中 清 2003/02/02 田中 惠子 2005/03/05 生年月日1か生年月日2が2003年2月中なら抽出。 ーーー 質問はこれではないと思うが、(質問者が、質問と望む結果を、質問に挙げないからだ)ACCESSのクエリ(背後にSQLあり では 鈴木 純一 ・・・ 田中 清 ・・・ のように出すのは無理でしょう。 レコード処理をVBAでやれば造作も無いが。 ーー あるいはAND条件の行ずらしをしてない(初心者的なこと)からでは。

omame2525
質問者

お礼

imogasiさま ありがとうございました。 新しいフィールドを作ることで解決することができました。

omame2525
質問者

補足

imogasiさま 早速のご教示ありがとうございます。 例示がなく失礼いたしました。 うまくいかない入力状態は次のとおりです。 [家族が2人の場合] ID,氏名1,生年月日1,氏名2,生年月日2 1 山田太郎 1998/02/05 山田花子 2005/11/12 2 上田憲一 1996/01/01 上田順子 1997/12/13 3 山本二郎 2005/05/05 山本三郎 2006/07/08 フィールドのデザイングリッド ※行をずらして「または」の行に入力しています。 生年月日1の欄 >#2002/04/01# 生年月日2の欄 「>#2002/04/01#」 その結果の表示データ 1 山田太郎 1998/02/05 山田花子 2005/11/12 3 山本二郎 2005/05/05 山本三郎 2006/07/08 ID3は2名とも条件に合致するので問題ないのですが、ID1のようにどちらかが合致すると、対象外のもう1名も表示されてしまいます。 やはりクエリの条件式ではムリなのでしょうか…

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1

たぶんデータベースを再設計したほうが手っ取り早いかと。 例えば、世帯テーブル(THousehold)と家族構成テーブル(TFamilyStructure)に分割して、 元テーブル(家族1,生年月日1,世帯名)→TFamilyStructure(家族,生年月日,世帯名) 元テーブル(家族2,生年月日2,世帯名)→TFamilyStructure(家族,生年月日,世帯名) ――みたいに変形すれば、抽出しやすくなります。

omame2525
質問者

お礼

osamyさま クエリにフィールドを新設することで解決することができました。 でも家族の転居など今後のデータ更新作業を考えると、世帯テーブルと家族構成テーブルを分けるほうがいいかもと考えています。 ありがとうございました!

omame2525
質問者

補足

osamyさま早速ありがとうございます。 実はすでに1000世帯分ほどのレコードが登録済みで、いろいろな抽出やレポート作成に活用しているデータベースなので、このテーブルをどうしてもそのまま使いたいのです。 クエリで何とかできればありがたいのですが…

関連するQ&A

  • ACCESS2000 クエリの抽出条件

    フィールドに無作為に年月日が入力されているとします。 クエリの抽出条件に>2008/1/1と入力すると「2008年1月1日よりも新しい日付のレコード」を選択できます。 新しい日付の上位25までを選択するためには、抽出条件になんと入力したらいいのでしょうか。あまりにも基本的な質問かもしれませんが、お時間の許す方にお願いします。

  • Access クエリ 抽出条件

    Access の クエリ における 抽出条件 の 書き方についてご質問させていただきます。 クエリには、左から『商品名』、『出荷数量』、『注文数量』の3列がございます。 各レコードの『出荷数量』フィールドの値と『注文数量』フィールドの値を比較し、 『注文数量』フィールドの値の方が大きいレコードだけを抽出したいのですが、どのように抽出条件を記載すればよろしいでしょうか? 元データは1つのテーブルに格納されています。 例:注文数量:500、出荷数量:200など出荷数量が少ないレコードを抽出対象 注文数量:100、出荷数量:100など注文数量=出荷数量レコードは抽出対象外

  • ACCESSでの抽出について

    単純なクエリの抽出なのですが・・・。 区フィールド、町フィールドをクエリで作成して そのクエリを元に抽出フォームを作成しました。 そして、クエリの抽出条件に以下の式を入力しました。 Like "*" & [Forms]![F_抽出]![区] & "*" Like "*" & [Forms]![F_抽出]![町] & "*" しかし、大本のデータに [区]フィールド→品川区 [町]フィールド→空白 ・・・と、どちらかが空白の場合、そのレコード を抽出してくれません。 このように、空白フィールドを持つレコードをも 抽出するにはどのようにしたらようですか? 初歩的な質問で申し訳ありませんがよろしくお願いいたします。

  • Access 複数の抽出条件

    Access2002 windows2000 (例)次のようなテーブルとします。 フィールド名:名前 年齢 性別 レコード1 :山本 30 男 レコード2 :鈴木 40 女 レコード3 :田中 45 男 レコード4 :森本 26 女 クエリを利用して抽出する時、年齢が40以上で男を条件とすれば (1)年齢フィールドの抽出条件:>=40 (2)性別フィールドの抽出条件:男 として、田中が抽出されます。 では年齢が40以上で男、そして女は全て抽出したい時は(1)(2)の条件はどの様にすればいいでしょう? 抽出結果が 田中、鈴木、森本となりたいのです。 複数のクエリを作れば出来ますが、1つのクエリでは無理なのでしょうか。

  • ACCESSクエリーの抽出条件について

    OS WIN7 ACCESS 2007使用です。 クエリーの抽出条件について何ですが、テーブルにコードというフィールドがありまして、そこには数値が入力されています。 コード 1 2 3 4 5 ・ ・ このテーブルを元に選択クエリーを作りたいのですが、条件としてコードの値に2と3両方がある場合、2のレコードだけを表示せず、どちらか一方の数値だけの場合またはどちらもない場合は、全てのレコードを表示するようにしたいのです。 抽出条件はどのように書けばよいのでしょうか? いろいろ試したのですが、うまくいきません。 どなたかお助け下さい。

  • アクセス クエリー 抽出条件について

    アクセス クエリー 抽出条件について たとえば文字列で5桁の仕入先コードフィールドが有るとします。で1と3と5を除くレコードを表示させたいときは 抽出条件をどの様に設定したらよろしいでしょうか?

  • Access 抽出条件

    クエリの抽出条件で特定のレコードを抽出したいのですが 最新の三年分のレコードデータを抽出する場合どのような式にすればよいのでしょうか? テーブルには年月フォームがあり年月が入力されています。

  • アクセスの抽出条件設定について

     初めて質問させていただきます。  仕事でアクセスを使うようになりました。テーブルとクエリ、レポートとの関係性は、なんとなくですが理解できているみたいです!?  今回みなさまにお伺いしたいのは、クエリから条件を設定して抽出し、それをレポートにする方法です。  具体的には、ランダムに入っている年月日データから、翌月のデータだけ抽出したいのですが、やり方が分からず、困っています。  フィールドデータ(db~)みたいのを入力しても、エラーの連続です。  ご存知の方がいらっしゃいましたら、ぜひ、教えてください。お願いいたします。

  • アクセス・クエリの抽出条件(翌日以降)

    WinXP、OfficeXPまたはOffice2000のアクセスを使用してクエリを 作成しているのですが、抽出条件の設定方法を教えて下さい。 データベースには"年月日"の情報があり、それは当日及び翌日以降の 年月日情報です。 その中から、翌日以降だけのデータを抽出したい場合にどのような 抽出条件を入力すれば良いのでしょうか。

  • アクセスフィールドの抽出条件について。

    アクセスに取り込んだデータに 連続番号があったとします。 クエリの抽出条件で 連続番号が奇数の場合のレコードを抽出 連続番号が偶数の場合のレコードを抽出というように 奇数偶数の作業列を作らず 抽出条件を一気に判定することは出来ますでしょうか。 一応試したのが作業列を作る方法ですが 例えば50フィールドあるクエリを作成し 連続番号をキーに フィールド mod 2 とすると 奇数偶数の判定が出来 抽出条件は満たすのですが フィールドのmodの判定で 連続番号が上書きされてしまいます。 また http://www.mahoutsukaino.com/ac/ac2000/ac2000/nigyo/gyo02.htmの ようにすると フィールド数が足りなく すべてのフィールドが追加出来なくなります。 どなたかアドバイスよろしくお願いします。

専門家に質問してみよう