• ベストアンサー

アドバイスください! クエリについて

こんにちわ! お分かりの方、どうかアドバイスください! 以下でテーブルを作成しています。 「生徒マスターテーブル」 ID,名前 1,山田 2,佐藤 3,山下 4,小泉 「テスト実施内容テーブル」 ID,名前,実施月,テスト結果,テスト内容 1,山田,2006/9月,60,算数 2,佐藤,2006/9月,60,算数 3,山下,2006/9月,60,算数 4,小泉,2006/9月,60,算数 1,山田,2006/10月,, 2,佐藤,2006/10月,, 3,山下,2006/10月,, 4,小泉,2006/10月,, そこでフォームのためのクエリ作成なのですが、 9月,10月を纏めて入力できるクエリを3つ作成しました。 1・9月のクエリ(実施月で抽出) 2・10月のクエリ(実施月で抽出) 3・9月、10月のクエリ しかし、、これって3つもクエリ作成する必要があるのかが疑問です。 できれば一つのクエリで解決したいと考えております。 ちょっとわかりずらくて恐縮ですが、アドバイスいただける方どうか ご教示いただけると非常に助かります。 、、テーブルの設計についても「もうすこし、こうしたほうがいい」 などのアドバイスがいただけるとありがたいです。 どうぞ宜しくお願いします。

  • E-7MX
  • お礼率46% (15/32)

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

  • ベストアンサー
noname#22222
noname#22222
回答No.3

<生徒マスター> ID   名前 1   山田 2   佐藤 3   山下 4   小泉 <テスト履歴> ID 生徒マスター_ID 実施月 得点 科目 1 1         2006/09 60  算数 2 2         2006/09 60  算数 3 3         2006/09 60  算数 4 4         2006/09 60  算数 5 1         2006/10 10  算数 6 2         2006/10 10  算数 7 3         2006/10 10  算数 8 4         2006/10 10  算数 と、多少、テーブル設計を修正。 1、[ツール]-[リレーションシップ]をクリック。 ・画面を右クリックして2つのテーブルを追加。 ・履歴の生徒のIDと生徒マスターIDを結ぶ。 ・結合の種類は3がよい。 これで、テスト履歴に生徒の名前は必要なくなります。 2、[テスト履歴.生徒マスター_ID]が、[生徒マスター.名前]を表示するには。 ・[テスト履歴]をデザインで開く。 ・列[生徒マスター_ID]をクリック。 ・下段の<ルックアップ>をクリック。 ・表示をコンボボックスに修正。 ・値集合ソースをポイントし[...]をクリック。 ・生徒マスターのID、名前を選択し閉じる。 ・列数=2 ・列幅=0;3 これで、[生徒マスター_ID]列には[生徒マスター.名前]が表示されて選択すれば[生徒マスター_ID]には[ID]が入力されます。 ルックアップ機能付加後の<テスト履歴>を開くと次のようです。 ID 生徒マスター_ID 実施月  得点 科目 1    山田    2006/09  60  算数 2    佐藤    2006/09  60  算数 3    山下    2006/09  60  算数 4    小泉    2006/09  60  算数 5    山田    2006/10  10  算数 6    佐藤    2006/10  10  算数 7    山下    2006/10  10  算数 8    小泉    2006/10  10  算数 3、単純に、まず、クエリを生成。 まず、欄順に、[テスト履歴]だけのクエリを作成します。 これで、生徒の氏名も表示されますので心配いりません。 4、質問の答え。 実質月の検索条件を右クリックしてズーム。 IN ([参照する月を入力して下さい!],[別の月も指定することが出来ます!]) をコピー。 これで、'2006/09'に続き'2006/10'と'抜きで入力すれば2月参照します。 1月でよければ2つめは{Enter}を入力します。

E-7MX
質問者

お礼

s_huskyさま 完璧にいつも回答いただき、、本当に感謝しております! 少しはまともなアクセス作成が出来そうです!!

その他の回答 (3)

noname#22222
noname#22222
回答No.4

s_husky です。 X まず、欄順に、[テスト履歴]だけのクエリを作成します。 O まず、単純にに、[テスト履歴]だけのクエリを作成します。

  • mshr1962
  • ベストアンサー率39% (7418/18948)
回答No.2

フォーム上に期間From,期間Toのテキストボックスとフィルタの実行ボタンを設けて フィルタを設定する方法でも出来ます。

  • mircle
  • ベストアンサー率16% (67/409)
回答No.1

パラメータークエリにされたらいかがですか? その都度 条件を入れる必要がありますが、1つのクエリで済みます。 1,2の場合 抽出条件のところに 例えば、[実施月で抽出]というパラメータを入れれば可能だと思います。 3の場合も同様にパラメータクエリのOR条件で可能だと思います。

関連するQ&A

  • クエリにおける複数値の抽出について

    クエリにおける複数値の抽出について access2007を使用しています。 テーブルA,テーブルBを元にクエリCを作成しました。 テーブルAには担当というフィールドがありますが,複数の値の入力を許可しており,テーブルBを値集合ソースとして設定してあります。 クエリCにおいて,以下のような抽出をしたいと考えています。 例えば, ID_所員ID_担当 001_B001,B002,B003_山田,佐藤,鈴木 002_B002_佐藤 003_B001,B002_山田,佐藤 において,所員IDの抽出条件のところにB002と入力すると,ID002のみが抽出されるといった感じです。 B002と抽出条件を設定すると,B002を含む全てのレコードが抽出されてしまいます。この場合ですと,ID001から003の全てのレコードが抽出されます。 担当のところで抽出条件を佐藤と設定し,さらに所員IDの抽出条件のところに,Len関数を使用して4文字以下とすれば…とも考えたのですが上手くいきません。 もし,良い方法があればご教示ください。

  • Accessの選択クエリの抽出条件について

    いちもお世話になります。Access2002を勉強中の初心者です。 顧客テーブルから選択クエリを作っています。クエリのフィールドには「都道府県」(東京、埼玉、千葉...)と「顧客名」(山田、佐藤、田中...)があります。 「顧客名」の山田以外を抽出したいのですが、但し「都道府県」が東京の場合は山田以外の条件を外したいのです。つまり、埼玉、千葉の山田は抽出しませんが東京の山田は抽出したいのです。 このような抽出条件の設定ができますか? アドバイス、よろしくお願いします。

  • 難しいクエリなので教えてください。

    データベース:MYSQLのバージョン4です。 1ヶ月予約していない人を抽出せよ、というクエリです。 テーブルは 顧客テーブル(t_customer)と予約テーブル(t_yoyaku)です。 顧客テーブルのカラムは、顧客番号(no)、氏名(name)です。 予約テーブルのカラムは、顧客番号(no)と予約日付(day)です。 以下のようにレコードが登録されています。 顧客テーブル 顧客番号 氏名 1  鈴木太郎 2  佐藤一朗 3  高橋次郎 4  山田五郎 予約テーブル 顧客番号 予約日付 1  2008-4-10 1  2008-5-11 1  2008-6-12 1  2008-7-10 2  2008-5-12 2  2008-6-10 3  2008-6-11 3  2008-8-12 ※予約テーブルに登録されていない場合(山田五郎)も合わせて 抽出 すみませんが、上記のクエリについてどなたか 教えてください。お願いします。

    • ベストアンサー
    • MySQL
  • SQL文を教えてください

    SQL文を教えてください。 以下のテーブルがあります。 T入金 [ID] [名前] [金額] [入金日] 1, 山田, 25000, 2009/01/01 2, 佐藤, 5000, 2009/02/01 3, 山田, 30000, 2009/01/02 4, 佐藤, 45000, 2009/02/02 5, 佐藤, 10000, 2009/02/03 同じ人物で、入金額50000円に至ったときの入金日を 抽出したいと思っています。 上記データだと、 山田さんは入金日2009/01/02、 佐藤さんは入金日2009/02/02、 ということになります。 これを一つのSQL文で抽出できますでしょうか。 ご教授宜しくお願いいたします。 (Access2000のクエリで抽出しようとしていますが、Accessで無理ならSQL Server、MySQL、PostgreSQLでも可です)

  • クロス集計のユニオンクエリーがうまくできません

    お力をお貸し願います。 Microsoft Accessで次のようなテーブルがあります。 日付           ステータス        名前 2005/12/01 8:15:00    ON         山田 2005/12/01 8:20:00    ON         佐藤 2005/12/01 8:22:00    ON         鈴木 2005/12/01 17:05:00   OFF        鈴木 2005/12/01 18:17:00   OFF        佐藤 2005/12/01 18:30:00   OFF        山田 2005/12/02 8:15:00    ON         山田 2005/12/02 8:20:00    ON         佐藤 2005/12/02 8:22:00    ON         鈴木 2005/12/02 17:05:00   OFF        鈴木 2005/12/02 17:15:00   OFF        佐藤 2005/12/02 18:45:00   OFF        山田 これを元に、次のような2つのクロス集計を作成しました。       12/01     12/02 山田    ON       ON   佐藤    ON       ON 鈴木    ON       ON ----------------------------------       12/01     12/02 山田    OFF      OFF   佐藤    OFF      OFF 鈴木    OFF      OFF これらから合成した表形式を得ようとユニオンクエリを作成しましたができませんでした。具体的には次のようなものです       12/01     12/02 山田    ON       ON   山田    OFF      OFF 佐藤    ON       ON 佐藤    OFF      OFF 鈴木    ON       ON 鈴木    OFF      OFF このような表はユニオンクエリで作成できるものでしょうか。

  • accessである期間にいる人のクエリ抽出をしたい

    access2002を使っています。 テーブルAで、それぞれの人の活動開始日と終了日のデータを もっています。 名前    開始日    終了日 ─────────────────── 井上さん  2005/07/01  2005/11/30 渡辺さん  2005/09/22  2005/09/23 佐藤さん  2005/10/03  2005/10/05  ・  ・  クエリで、「2005/10/01~31まで活動した人」 (テーブルAで、活動期間の中に10月が1日でも含まれている人」を 抽出したいのですが、どうすればよいのかわからず困っています。 テーブルAで言えば、10月の活動者だと、 井上さんと佐藤さんを抽出したいのです。 よろしくお願いします。

  • ACCESSで空のフォームにクエリの値を追加する方法

    ACCESSで空のフォームにクエリの値を追加する方法 ACCESS2007を使っています。 フォームで空のフォームから始めた時やウィザードでテーブルやクエリを 対象とした場合でも、別のクエリの値を表示させたいのですが可能でしょうか? 可能であれば、 クエリに対してさらにクエリを与えて1フィールドになるようにし それを配置できるといいのですが。 例えば、クエリの結果: (ID)、(名前)、(売上)  1   田中   100  2   佐藤    50  3   山田   220 というのがあったとして、「100」「50」「220」というのを各各1つのテキストボックス のようなものにできるといいと思っています。(IDをそれぞれに固定で指定します。) できなければ、サブフォームのようなものでもいいのですが、 フォームの作成時ではなく、後から追加する方法があれば知りたいです。 よろしくお願い致します。

  • アクセスのクエリに「PHONETIC」関数はないのですか?

    アクセス2003です。 テーブル1 名前 佐藤 鈴木 木村 を クエリ1にて 名前  ふりがな 佐藤   サトウ 鈴木   スズキ 木村   キムラ というようなフィールドを作成したいのですが クエリのデザインビューのビルドで見る限りだと 「PHONETIC」関数がありませんでした。 クエリではなくテーブルに手打ちするしかないのでしょうか? よろしくお願い致します。

  • Accessでテーブルの内容を抽出したい

    お世話になります。 Access2000で作成しております。 下記のテーブルAがあります。 名前1とタイム1,名前2とタイム2をセットにして、 テーブルBを作成したいのですが、 どのようにすれば作成できるでしょうか? 可能でしたら、「クエリ」で、説明難しければ「SQL」で 教えていただければと思います。 ※SQLの場合は、クエリに変換して使用します。 ----テーブルA---- 番号 名前1 名前2 名前3 タイム1 タイム2 タイム3 1 山田 田中  佐藤 10 8 9 2 鈴木 木村  戸田 7  8 9 ----テーブルB------ 名前 タイム 山田 10 田中  8 佐藤 9 鈴木 7 ・ ・ -------------------- お手数ですがよろしくお願いいたします。

  • ある条件を含まないというクエリがうまく書けません。

    ある条件を含まないというクエリがうまく書けません。 test_table ID,name ----------- 1,aaa 2,bbb 3,ccc 4,ddd 5,eee test_table2 ID,value ----------- 1,100 1,200 1,300 1,400 2,100 2,200 3,900 3,800 4,400 4,500 4,600 5,100 今まで下記クエリのように、test_tableのIDとtest_table2のIDでジョインして、 test_table2のvalueに"200"を含んでいるtest_tableのレコードを取得していました。 SELECT DISTINCT test_table.* LEFT JOIN test_table2 ON test_table.ID = test_table2.ID WHERE test_table2.value = 200; (test_tableのID:1と2のレコードが返ってきます。) これを、test_table2のvalueに"200"を含まないものを返すようにしたいのです。 (test_tableのID:3と4と5のレコードを返したい) 下記クエリを作ってみましたが、ID:1と2も返ってきてしまいます。 ID:1のvalueの"100","300","400"、ID:2のvalueの"100"に条件が合ってしまうようです。。 SELECT DISTINCT test_table.* LEFT JOIN test_table2 ON test_table.ID = test_table2.ID WHERE test_table2.value != 200; なにが良い方法があればご教授下さい。

    • ベストアンサー
    • MySQL

専門家に質問してみよう