• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Accessの抽出条件がうまく作れず困っています)

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

このQ&Aのポイント
  • Access2003で町内会のデータベースを作成しており、家族構成による対象者の抽出条件を設定するのに困っています。
  • 各世帯を1レコードとし、家族名と生年月日をフィールドにしています。しかし、家族1と家族2のフィールドに対象者が混ざってしまい、正しく抽出できません。
  • 家族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/17069)
回答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

専門家に質問してみよう