dポイントプレゼントキャンペーン実施中!

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

A 回答 (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など)やテーブル名以外は、必ず半角で入力する必要あり
です。
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/08/01 10:48

例を挙げてないので、質問のしたいことがはっきりしないが


例データ
始めの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さま
早速のご教示ありがとうございます。
例示がなく失礼いたしました。
うまくいかない入力状態は次のとおりです。

[家族が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名も表示されてしまいます。

やはりクエリの条件式ではムリなのでしょうか…

補足日時:2009/07/31 22:17
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/08/01 10:38

たぶんデータベースを再設計したほうが手っ取り早いかと。



例えば、世帯テーブル(THousehold)と家族構成テーブル(TFamilyStructure)に分割して、
元テーブル(家族1,生年月日1,世帯名)→TFamilyStructure(家族,生年月日,世帯名)
元テーブル(家族2,生年月日2,世帯名)→TFamilyStructure(家族,生年月日,世帯名)
――みたいに変形すれば、抽出しやすくなります。

この回答への補足

osamyさま早速ありがとうございます。

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

補足日時:2009/07/31 22:05
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/08/01 10:41

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!