• ベストアンサー
  • すぐに回答を!

Access2000での選択クエリの作り方

例えば、以下のようなクエリを作りたいのですが、うまくいきません。作り方教えてください。 以下のようなテーブル、クエリから       フィールド フィールド テーブル1 選手ID  50m走タイム         1     9.5秒 クエリ1  選手ID   年齢        1     21歳 テーブル2 年齢    タイム    得点       20以下   7秒未満    10       20     8秒未満     9       20     9秒未満     8       25以下   8秒未満    10       25     9秒未満     9       25     10秒未満     8 以下のようなクエリの作り方 クエリ 選手ID   50m走得点       1     8点        よろしくお願いします

共感・応援の気持ちを伝えよう!

  • 回答数5
  • 閲覧数178
  • ありがとう数3

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

  • ベストアンサー
  • 回答No.5
  • ARC
  • ベストアンサー率46% (643/1383)

>ARCさん、割り込みですみません。間違ってましたら、フォローお願いします。 いえいえ。こちらこそ既にNiiさんが回答をつけていらっしゃるのに、割り込むような真似をして申し訳無しです。 この手の「こういうことは出来ないの?」系の質問を見ると、どうも答えたくてたまらなくなっちゃうんです(^^; #3の回答も、「こんなやり方もあるよ」って言う意味で書いたものだったのです。 で、今回、私なりにいろいろ実験をしてみたんですが、いくつかやり方がある中で、#2の後半でNiiさんがお書きになられたモジュールを使うやり方が、速度面でも作業量の面でも優れているという結論に至りました。 クエリのみでも出来なくは無いですが、上記のような面で性能的に劣るようです。 以下、劣っているのを承知の上で、クエリを使ったやり方の改訂版を書いてみます(折角作ったのにもったいないから(苦笑)) ○各テーブル、クエリには以下のようなフィールドがあるとする(数値型の後で、特に型の指定のないものは、どんな型であっても可) クエリ1   選手ID(数値型,長整数型)   年齢(数値型) テーブル1   選手ID(数値型,長整数型)   記録(数値型,単精度浮動小数点型) テーブル2   年齢層(数値型)   記録層(数値型,単精度浮動小数点型) ○テーブル2には、以下のような感じでデータが格納されているものとする 年齢層 記録層  得点     0    0    0     0   200    1     0   235    5     0   275   10    20    0    0    20   205    1    20   240    5    20   280   10    25    0    0    25   200    1    25   235    5    25   275   10    27    0    0    27   197    1    27   233    5    27   270   10 ○以下のようなクエリを作成する [立幅跳び得点サブ1] SELECT [クエリ1].[選手ID], [クエリ1].[年齢], Val(DMax("年齢層","テーブル2","[年齢層] <=" & [年齢])) AS 年齢層, [テーブル1].[記録] FROM クエリ1 INNER JOIN テーブル1 ON [クエリ1].[選手ID]=[テーブル1].[選手ID]; [立幅跳び得点サブ2] SELECT 立幅跳び得点サブ1.*, Val(DMax("記録層","テーブル2","[年齢層]=" & [年齢層] & " AND [記録層] <=" & [記録])) AS 記録層 FROM 立幅跳び得点サブ1; [立幅跳び得点] SELECT 立幅跳び得点サブ2.選手ID, テーブル2.得点 FROM 立幅跳び得点サブ2 INNER JOIN テーブル2 ON (立幅跳び得点サブ2.記録層 = テーブル2.記録層) AND (立幅跳び得点サブ2.年齢層 = テーブル2.年齢層); ふぃ~ 疲れた(^^;

共感・感謝の気持ちを伝えよう!

質問者からのお礼

ARCさん、Niiさん、大変、ありがとうございました。 おかげさまで、解決できました。 また、壁にぶつかることもあるかと思います。 その時はどうぞ、よろしくお願いします。

関連するQ&A

  • ACCESS2000のクエリで、任意の日の時給を抽出したい

    ACCESS初心者です。 上級者の方には造作も無いことかもしれませんが、 この1点に悩んだまま、どうしても答えが出ないため、質問をしています。 目的は、クエリ中のフィールド名「勤務日」にあるレコード日(日付/時刻型、データは年月日のみ)に対応した「時給」を、テーブル「T_時給」からクエリに抽出したいのです。 この場合、発令日以降、同じ人に次の時給が発令がされるまでは、従前の時給を保持したいのです。 具体的には、以下の結果となるよう、<時給>のフィールドを自動的に求めたいのです。 テーブル「T_時給」 フィールド 「従業員ID」 「発令日」 「発令給」        (数値型) (日/時型) (通貨型)        1      2009/1/1   1000        1      2009/3/1   1500        1      2009/5/1   1300        2      2009/1/1   2000 クエリ「Q_給料」 フィールド 「従業員ID」 「勤務日」 <時給>        (数値型) (日/時型) (通貨型)         1     2009/1/1   1000         1     2009/2/2   1000         1     2009/3/3   1500         1     2009/4/4   1500         1     2009/5/5   1300         2     2009/1/1   2000         2     2009/2/2   2000 これまでの結果、クエリの<時給>の抽出条件に >=[T_時給]![発令日] と入力したところ、発令日が複数ある従業員では、時給の表示も複数抽出されて、レコードがダブってしまいます。 どうか、よろしくお願いします。

  • 27歳、50mを6秒台で走りたい

    27歳の男です。 どうしても50m6秒台で走りたいです。可能性はあるでしょうか? 小学校4年 8秒7 小学校5年 8秒2 小学校6年 7秒8 中学1年 7秒8 中学2年 7秒4 中学3年 7秒08 高校1年 7秒5 高校2年 7秒5 高校3年 7秒5 先日 9秒8 というタイムです。また、どういったトレーニングが有効でしょうか?

  • Access2007での選択クエリー

    先日下記の質問をしたところ ID DATE ITEM とテーブルの列にあります。DATEの列には何十年ものyyyy/m/d が入っています。 作りたいクエリーはこのDATEの中から今日と同じ月日のものを選択したいのです。 それもいちいち今日の日付を手動で入れるのではなく (例えばTODAY()) のような ものを使ってクエリーを実行したときぱっと出てくるものを作りたいのですが。 よろしくお願いします。 識者より下記を教えていただき 「日付フィールドの抽出条件欄に Like "*/" & Format(Date(),"mm/dd"」 これでばっちり出来たので喜んでいたところ これと同じ ID DATE ITEMを持つ他の(仮にa.accdbとする)データーベースにこのクエリーを試したところ全く選択できません。 いろいろ見比べてみましたが選択出来たものと出来ないものの違いが分かりません。 よろしくお願いします。

その他の回答 (4)

  • 回答No.4
  • Nii
  • ベストアンサー率48% (79/162)

ARCさん、割り込みですみません。間違ってましたら、フォローお願いします。 年齢・距離がテキスト型というのでしたら、下記のように変更すれば大丈夫と思います。 SELECT 選手ID,年齢層, 記録層, DLookUp("得点","テーブル2","[年齢] = '" & [年齢層] & "' AND [距離] = '" & [記録層]) AND "'" AS 得点 FROM クエリ2; DLookup関数に渡している第3パラメータの条件で、データ型が数値型の時は、"[フィールド名] = " & [フィールド名]でいいのですが、テキスト型の時は、"[フィールド名] = '" & [フィールド名] & "'"としてあげる必要があったはずです。

共感・感謝の気持ちを伝えよう!

  • 回答No.3
  • ARC
  • ベストアンサー率46% (643/1383)

いろいろ方法はあると思うんですが、クエリのみを使ったやり方を一つ。 ○予備知識 SQLビューについて。 クエリをデザインする時に、[表示]-[SQLビュー]と操作すると、クエリを文字の形で表示、編集できるようになります。その後、[表示]-[デザインビュー]で、元のクエリデザインに戻ります。 クエリ作成のようなマウス操作を文字で伝えるのは非常にメンドクサイため(笑)、ここではSQLの形でクエリを扱うことにします。 回答のSQLの部分をメモ帳などにコピーして、テーブル名、フィールド名などを適宜書き換えます。そして、クエリを新規作成して、SQLビューに切り替え、メモ帳からSQLを貼り付けてご利用ください。 ○作業用のクエリの作成 以下のクエリを新規作成して、「クエリ2」という名前で保存してください。 ---切り取り線--- SELECT [クエリ1].[選手ID], Val(Partition([年齢],0,200,5)) AS 年齢層, Int([50m走タイム]) AS 記録層 FROM クエリ1 INNER JOIN テーブル1 ON [クエリ1].[選手ID]=[テーブル1].[選手ID]; ---切り取り線--- ○クエリの作成 同様に、クエリを作成して、以下の内容を貼り付けてください ---切り取り線--- SELECT 選手ID,年齢層, 記録層, DLookUp("得点","テーブル2","[年齢] = " & [年齢層] & " AND [タイム] = " & [記録層]) AS 得点 FROM クエリ2; ---切り取り線---

共感・感謝の気持ちを伝えよう!

質問者からのお礼

ARCさん、回答ありがとうございます。 後、もうちょっとのところまで来ていると感じているのですが、まだ、完全解決していません。 テーブル2については、実際は、50m走ではなく、立ち幅跳びのデータで、以下のような形でやっています。 ご教示のとおり、SQL文でやったところ、DLookupを使ったクエリの得点フィールドがエラーで、「抽出条件でデータ型が一致しません」となってしまいます。尚、テーブル2の年齢、距離(タイムの代わり)、得点ともテキスト型です。 再度、ご教示ください。 ID 年齢 距離 得点 1 :29 :188 0 2 :29 189:197 1 3 :29 198:206 2 4 :29 207:215 3 5 :29 216:224 4 6 :29 225:233 5 7 :29 234:242 6 8 :29 243:251 7 9 :29 252:260 8 10 :29 261:268 9 11 :29 269: 10

  • 回答No.2
  • Nii
  • ベストアンサー率48% (79/162)

テーブル1の50m走タイムフィールドのデータ型はSingle クエリ1の年齢のデータ型は、Integerと仮定します。 テーブル1とクエリ1を元に、クエリ2を作成します。 フィールドは、選手ID タイム:Partition(Int([50m走タイム]),7,9,1) 年齢:Partition([クエリ1].[年齢],20,25,5)でいいでしょう。 テーブル2の年齢・タイムフィールドのデータ型は、Stringとし、Partition関数で返される形式で、入力しときます。 テーブル2 タイム 年齢    得点   : 7     :20 10   : 7    21:25 11   : 7    26: 12  8: 8     :20 9  8: 8    21:25 10  8: 8    26: 11  9: 9     :20 8  9: 9    21:25 9  9: 9    26: 10 最後に、クエリ3を作成すればできあがり? モジュールが理解できるならば、こういった方法もあります。 Function 得点(年齢 As Integer,たいむ As Single) As Integer Select Case 年齢 Case < 20   '20歳以下 Select Case たいむ Case < 7.0  '7秒以下 得点 = 10 Case < 8.0  '8秒以下 得点 = 9 Case < 9.0  '9秒以下 得点 = 8 End Select  'タイムの終わり Case < 25 略 Case Else End Select  '年齢の終わり (記憶を頼りに書いてるので、間違ってるかも・・・) こういったモジュールを用意して、保存しときます。 クエリの中から、50m走得点:得点([年齢],[50m走タイム])で標準関数みたいに呼びだしゃOKかな? ん~、回答になってます?

共感・感謝の気持ちを伝えよう!

  • 回答No.1
  • Nii
  • ベストアンサー率48% (79/162)

とりあえず、こんなのではどうでしょ? 50m走タイムを整数型に変換し、Partition関数に渡します。 タイム:Partition(Int([50m走タイム]),7,9,1) この場合のタイムの取りうる値は " : 7" " 8: 8" " 9: 9" "10: " の4通りと思われます。この文字列をテーブル2のタイムフィールドに設定します。 年齢も同様に Partition([年齢],20,25,5) として下さい。 タイムのパターン×年齢のパターン数のレコードをテーブル2に作成し、それぞれに得点を振って、完成かな?

共感・感謝の気持ちを伝えよう!

質問者からの補足

Niiさん、回答ありがとうございます。 ただ、まだ、問題解決していません。 Partition関数は、クエリで使えるとの理解でおり、おっしゃるように、如何にテーブルでPartition関数を使うか、 ヘルプを見たりして努力しましたが、よくわかりません。 追加ご教示いただければ幸甚です。

関連するQ&A

  • Access2000で複数の検索項目を作りたいのですが・・・

    こんにちわ。 今、Accessで社員録を作成しているんですが、複数の検索について教えて下さい。 ■テーブル テーブル名:社員録 フィールド名:ID・検索名・氏名・所属ID・所属 ■クエリ クエリ名:社員録クエリ フィールド名:ID・検索名・氏名・所属ID・所属 検索名抽出条件:検索名フィールド: Like [Forms]![社員録 縦]![けんさく]         所属フィールド: Like [Forms]![社員録 縦]![抽出検索名] ■フォーム フォーム名:社員録フォーム:テキスト1・テキスト2・ボタン1       社員録サブフォーム:データソース:社員録クエリ テキスト1:所属を入力 テキスト2:検索名を入力 ボタン1:マクロの再クエリを実行する ■ここからが質問です■ (1)テキスト1又は、2が空白のとき社員録全体から検索かフィルタ。 (2)テキスト1・2が、入力されてる時、両条件から検索かフィルタ。 をしたいのですが、何かいい方法がありましたら教えて下さい。 説明が、長くなってしまってスミマセン。。。

  • ACCESS2000での円グラフ作成

    ACCESS2000の勉強をしております レポートでの円グラフの作成が上手くいきません 以下に内容を記述いたしますので、ご教授いただけるようでしたら なにとぞ宜しくお願いします 1.テーブル(table-1) ID 比率 1 100 2 200 3 50 4 300 2.クエリ(Query-1) フィールド:比率 テーブル:table-1 3.レポート グラフウイザードでQuery-1で比率を指定する 4.困ったこと レポートを実行すると下記の添付の画面となります。 私としてはテーブルのID=1,2,3,4の比率の円グラフ にしたいのですが、なりません。 また、画面上の「セグメント1」も意味が理解 できません。 私の考え方がおかしいのかもしれませんが、 どなたかアドバイス等でも頂けるとありがたいです。

  • ACCESS2000 コンボボックスによるデータ入力

    2つのテーブルがあります。 1つのテーブルは、顧客テーブルとし「氏名」「住所」「TEL」「担当者」とします。 もう1つは、担当者テーブルとし「ID」「担当者」 フォームで、 1つめの「担当者」のところをコンボボックスにしました。 プロパティは、 コントロールソース→担当者 値集合タイプ→テーブル/クエリ 値集合ソース→担当者テーブル としました。 顧客テーブルの「担当者」フィールドは、担当者テーブルから取得したいの です。 しかし、フォームで開きコンボボックスで値を変えようとしますが、 データが固定していて顧客テーブルに入力されません。 ほかのボックスは入力OKです。 リレーションは、担当者フィールド同士で設定してもしなくても 入力は可になりません。 状況がつかみづらいですが、わかる方教えてください。

  • ACCESS2000でExcelから特定フィールドをインポートしたい

    ACCESS2000でExcelから特定のフィールドをインポートしたいのですが、 うまくいきません。 Excelはフィールド数が254フィールドもあり、 テーブルにインポートしたいフィールド数は30フィールドです。 Excelでは特定フィールドをインポートすることができないようなので、 一時テーブルに全てのフィールドをインポート後 必要なフィールドだけ取り出そうとやってみたのですが、 以下のコードを実行すると、13のフィールドが「解析不能なフィールド」と インポートエラーが出てしまいます。 DoCmd.TransferSpreadsheet acImport, 8, "TEMPテーブル", "c:\data.xls" また、Excelファイルをcsv形式に変換して、インポート定義を作る方法も やってみたのですが、インポート定義作成時に 「フィールド'ID'はインポートまたはエクスポートしようとしている テーブルまたクエリに存在しません」 というエラーが出てしまいます。 どうしたらインポートできるでしょうか。よろしくお願いします。

  • Accessのクエリ作成について

    クエリを作成する際の、テーブルの設定の仕方がよくわかりません。 たとえば、「顧客リスト」テーブルと「販売履歴」テーブルに、それぞれ「顧客ID」フィールドがあり、「顧客ID」フィールドがリレーションシップで設定されているとします。 新たに、選択クエリを作成し、そのクエリに、「顧客ID」フィールドを設定するときに、どちらのテーブルの「顧客ID」フィールドを設定するかがわかりません。 ちなみに顧客IDフィールドには、リレーションシップを設定していて、1対多の設定をしています。 「顧客リスト」テーブルの「顧客ID」フィールドが、「1」の側で、 「販売履歴」テーブルの「顧客ID」フィールドが「多」の側です。 どちらのテーブルを使用しても結果は同じなのですが、 選択クエリを作成するときに、上記のように、同じフィールドを持テーブルが2つありリレーションシップを 設定している場合は、どちらのテーブルを使わないといけないというような決まりはあるのでしょうか? どちらを使用しても構わないのでしょうか。 特に、決まりがない場合は、一般的には、どのように設定されているのでしょうか?

  • Accessのクエリ作成について

    クエリを作成する際の、テーブルの設定の仕方がよくわかりません。 たとえば、「顧客リスト」テーブルと「販売履歴」テーブルに、それぞれ「顧客ID」フィールドがあり、「顧客ID」フィールドがリレーションシップで設定されているとします。 新たに、選択クエリを作成し、そのクエリに、「顧客ID」フィールドを設定するときに、どちらのテーブルの「顧客ID」フィールドを設定するかがわかりません。 ちなみに顧客IDフィールドには、リレーションシップを設定していて、1対多の設定をしています。 「顧客リスト」テーブルの「顧客ID」フィールドが、「1」の側で、 「販売履歴」テーブルの「顧客ID」フィールドが「多」の側です。 どちらのテーブルを使用しても結果は同じなのですが、 選択クエリを作成するときに、上記のように、同じフィールドを持テーブルが2つありリレーションシップを 設定している場合は、どちらのテーブルを使わないといけないというような決まりはあるのでしょうか? どちらを使用しても構わないのでしょうか。 特に、決まりがない場合は、一般的には、どのように設定されているのでしょうか?

  • ACCESSのクエリ計算

    Access2003でクエリで特定条件に一致するIDを出して 今度はそのそれぞれのIDから+100(IDが2なら2~102の範囲でというように)の元のテーブルの 値の中からフィールド1が5以上の条件に一致するものの最小のIDをもとめたいと思ってます。 始めたばかりの初心者です DMINでできるのかなと思って下記式にしてみたのですが パラメーターエラーでうまくいかなくて、、 DMin("[テーブル1].ID","[テーブル1]","[テーブル1].ID>=[クエリ1].ID&[ID]<[クエリ1].ID+100&[テーブル1]フィールド2>5")

  • アクセス2007 クエリの作り方

    アクセス2007 クエリの作り方 テーブルA 氏名  生れ年 ---------------- 佐藤   1990 鈴木   1950 斎藤   2000 伊藤   1970 テーブルB ------------------ 年齢   項目 10    少年 20    成人 60    還暦 とあった時 テーブルAを元に「クエリ1」で「年齢」を追加し 年齢: Year(Date())-[生れ年]としました クエリ1 氏名  生れ年 年齢 -------------------- 佐藤   1990  20  鈴木   1950  60 斎藤   2000  10 伊藤   1970  40 更に、「テーブルB」の年齢と「クエリ1」の年齢をリレーション(多対1?)して「クエリ2」としました。 クエリ2 氏名  生れ年 年齢 項目 --------------------------- 佐藤   1990  20 成人 鈴木   1950  60 還暦 斎藤   2000  10 少年 伊藤   1970  40「空欄」 アクセスはまだ良く理解していないのですが、これだとレコードの更新ができません。 フォームでレコードセットを「ダイナセット (矛盾を許す)」にすると更新はできますが不安です。 こんな時「ダイナセット (矛盾を許さない)」で行い場合どんなリレーションにしたら良いのでしょうか?    

  • ACCESS2007 重複について

    ACCESS2007を使用してます。 下記のように、IDコードのフィールドがあり、このコードに対して、重複しているデータ全てにフラグ1をたてたいのです。 <現在のテーブル> IDコード  ――――――+ 12345  12345  12378  12378  23457  23489  23456  <作成したいテーブル> IDコード 重複フラグ ――――――+――――――――+ 12345 1 12345 1 12378 1 12378 1 23457  23489  23456  重複フラグのフィールドは、現在のテーブルにありません。 どのようなクエリやSQLを作成すればいいでしょうか? よろしくお願い致します。

  • Access2000での日数の計算

    データベースの素人です。訳あって、データベースを作成することになりました。 ソフトはAccess2000を使用しております。 例えば「本体」というテーブルのフィールド項目に ID 荷物の受注日   荷物の発送日   所要日数 という項目があります。 同じくフォームにもこのとおりの項目があります。 「荷物の受注日」と「荷物の発送日」を手入力するのですが、「所要日数」だけは自動で計算をしたいのです。 マニュアル本とにらめっこをしながら、当初、フォーム上の「所要日数」の入力場所のプロパティ→データタブのコントロールソースに DateDiff("y",[荷物の受注日],[荷物の発送日]) と入力しました。 これで確かにフォームに入力した日付データに対して「所要日数」も表示されました。 しかし、「本体」テーブルのデータには、手入力した日付データは登録されているものの、「所要日数」は登録されていませんでした。 手入力した日付データを残したまま、今度はクエリを用いて「本体」テーブルのクエリを作ってみました。 クエリにて「所要日数」のところのフィールドに 所要日数: DateDiff("y",[本体]![荷物の受注日],[本体]![荷物の発送日]) と入力して、クエリを実行すると、確かにクエリの中の「所要日数」のところにはデータが出てきます。 しかしながら「本体」テーブルにも、フォーム上にもデータは出てきません。 いったいどのようにすれば、フォーム上にて手入力をした日付データに対して、所要日数を自動で計算し、そのデータが「本体」テーブルにも記録されるのでしょうか? どなたかお分かりになるかた、宜しくお願いいたします。

専門家に質問してみよう