• ベストアンサー

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

ARCの回答

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

>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.年齢層); ふぃ~ 疲れた(^^;

Cloes
質問者

お礼

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

関連するQ&A

  • 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")

  • Access2000 の選択クエリで・・・

    いつもお世話になってます。 特定のフィールドを見にいって、その値をもとに選択クエリに表示する文字を変えたいのですが、二者択一ではないので、Ilf関数を使えず代わりに何をどう使えばいいか分からず困っています。 例えば「顧客」テーブルの「履歴」フィールドを参照して、10以下なら「5P」11~20なら「10P」21~30は「20P」31以上は「30P」と表示できるような選択クエリを組みたいのですが・・・。 よろしくお願いします。

  • Accessクエリでのグループ化

    Accessクエリでのグループ化 以下の2つのテーブルが有ります。 ■社員テーブル ID 名前 1 Aさん 2 Bさん 3 Cさん 4 Dさん 5 Eさん ■受付テーブル ID 受付内容 受付日   社員ID 1  xxxxx 2010/3/1   1 2 xxxxx 2010/3/20   3 3 xxxxx 2010/4/10   2 4 xxxxx   2010/4/11  5 5 xxxxx 2010/4/15  1 6 xxxxx 2010/4/30  2 7 xxxxx 2010/5/3  4 そこで社員毎の受付数をカウントしたいと思っています。 ※受付日が2010/4/1以上5/1未満 名前 受付回数 Aさん 1 Bさん 2 Cさん 0 Dさん 0 Eさん 1 となるイメージです。 しかし、実際にクエリを作ると結果が 名前 受付回数 Aさん 1 Bさん 2 Eさん 1 と、なってしまいます。。 名前:グループ化 受付テーブルのID:カウント 受付日:>=2010/04/01 and <2010/05/01 ※社員テーブルの『ID』と、受付テーブルの『社員ID』を  紐つけており、結合プロパティでは『社員テーブルの  全レコードと受付テーブルの同じ結合フィールドのレコード  だけを含める』としております。 あらかじめ、受付テーブルで受付期間の条件でクエリ を作成しておき、それと社員テーブルを紐つけた場合は イメージ通りの結果になるのですが、1つのクエリで 上記イメージでの結果を表示したいと思ってます。 可能でしょうか? ご教授願います。

  • Access2007での選択クエリー

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

  • Accessの不一致クエリについて

    Accessの初心者です。二つのテーブルの異なるフィールどを比較する方法について、教えてください。 例えば、"6523610"という数字が両方のテーブルにあるかどうか調べたいとします。 テーブルA 523(フィールド名:契約コード)+610(ID) テーブルB 6523(フィールド名:取引コード)+61(フィールド名:地域コード) と、それぞれ構成が違います。頭につく"6"と最後の"0"は共通の数字です。クエリで新たなフィールドを作って、"6523610"にするまではわかるのですが、どのフィールドを関連づけていいかわかりません。このような場合は、不一致クエリではできないのでしょうか? 仕事で、明日中にデータを調べなければいけないので困っています。 よろしくお願いします。

  • Access更新クエリについて教えて下さい

    アクセス超初心者です。 入庫クエリでIDごとの入庫数を合計、 出庫クエリでIDごとの出庫数を合計し、 在庫クエリで在庫数を計算しています。 (入庫クエリの入庫数の合計)-(出庫クエリの出庫数の合計) 部品テーブルがあり、現在庫フィールドを作っています。 ID 部品名 現在庫 1  AAA   10 2  BBB   5 在庫クエリの在庫数を、部品テーブルの現在庫数に 代入したいと考えています。 在庫クエリを使い、テーブル作成クエリで現在庫テーブルを作成、 現在庫テーブルから更新クエリで、部品テーブルの現在庫数を 更新できるのではないかと考えたのですが、 つまづいてしまいました。 現在庫テーブル ID 在庫数 現在庫テーブルの在庫数を、IDごとに部品テーブルの現在庫に 置き換えることは可能ですか? また、その他よい方法がありましたら、教えて下さい。 ご指導のほど、よろしくお願いします。

  • Access 切り捨て合計クエリ

    Accessのクエリにて以下の集計・抽出を作成したいです。 抽出クエリの条件 (1):テーブルから商品名フィールで商品で始まるレコードを抽出する (2):抽出したレコードの数量フィールドの値を2000で割る (3):割り算後、小数点以下(1未満)が発生した場合は、0とする。 集計クエリの条件 (4):抽出クエリの条件式(1)~(3)を実施したのち、商品ごとに切り捨て後の整数を合算する ※数量が2000以上のレコードを抽出したいです。 どのようにすればよろしいでしょうか?

  • ACCESSのクエリで表示されるデータについて

    クエリで表示されるデータの範囲について教えてください。 <状況例> 例えばなのですが、取引先会社の管理データベースとして「テーブルA」と「テーブルB」があったとします。 「テーブルA]のフィールドは「会社ID」、「会社名」、「住所」とします。 「テーブルB]のフィールドは「連絡先ID」、「会社ID」、「担当者名」とします。 そして、「会社ID」をリレーションシップで繋いで、クエリで「テーブルA」「テーブルB」の全てのフィールドを表示したとします。 この時、「テーブルA」にデータが5つあり、「テーブルB」にはデータが2つしかなく、結果リレーションシップを通じて対をなすデータが2つしかない場合には、クエリでは2つしかデータが表示されないと思います。 <質問> クエリではリレーションシップで対をなさないデータは無効となるようですが、対をなさないデータも全てクエリで表示する方法はないのでしょうか。 上記例でいうと、「テーブルA」のデータ5件全てについて表示させたいのですが。もちろん、「テーブルA」のデータ中対をなしていないものについては、「テーブルB」のフィールド内容については「空白」での表示となりますが。