- ベストアンサー
Accessデータベースでの抽出条件の作成に困っています
- Access2003で町内会のデータベースを作成しており、家族構成による対象者の抽出条件を設定するのに困っています。
- 各世帯を1レコードとし、家族名と生年月日をフィールドにしています。しかし、家族1と家族2のフィールドに対象者が混ざってしまい、正しく抽出できません。
- 家族1、家族2のフィールドから対象者のみを抽出するには、どのような条件式を設定すれば良いでしょうか?夏休みのイベント案内のために早急に解決したいと思っています。
- みんなの回答 (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など)やテーブル名以外は、必ず半角で入力する必要あり です。
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17069)
例を挙げてないので、質問のしたいことがはっきりしないが 例データ 始めの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条件の行ずらしをしてない(初心者的なこと)からでは。
お礼
imogasiさま ありがとうございました。 新しいフィールドを作ることで解決することができました。
補足
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)
たぶんデータベースを再設計したほうが手っ取り早いかと。 例えば、世帯テーブル(THousehold)と家族構成テーブル(TFamilyStructure)に分割して、 元テーブル(家族1,生年月日1,世帯名)→TFamilyStructure(家族,生年月日,世帯名) 元テーブル(家族2,生年月日2,世帯名)→TFamilyStructure(家族,生年月日,世帯名) ――みたいに変形すれば、抽出しやすくなります。
お礼
osamyさま クエリにフィールドを新設することで解決することができました。 でも家族の転居など今後のデータ更新作業を考えると、世帯テーブルと家族構成テーブルを分けるほうがいいかもと考えています。 ありがとうございました!
補足
osamyさま早速ありがとうございます。 実はすでに1000世帯分ほどのレコードが登録済みで、いろいろな抽出やレポート作成に活用しているデータベースなので、このテーブルをどうしてもそのまま使いたいのです。 クエリで何とかできればありがたいのですが…
お礼
DexMachinaさま ユニオンクエリは初めて知りました。 手順まで詳しくお教えいただきありがとうございます。 やってみましたら、欲しかったデータのリストアップができました! 後々のことを考えると、やはりテーブルは要素ごとに細かく分けて、リレーションシップするのがいいんですね。 本当にありがとうございました!!