• ベストアンサー

Access2000のクエリ、教えてください。

データが 名前 NO 大学 -------------------------------- 田中 8 北海道大学 すずき 1 大宮大学 田中 3 青森大学 田中 2 千葉大学 すずき 3 湘南大学 すずき 4 山梨大学 すずき 2 東京大学 で、検索条件、名前の最大NO で 名前、 NO、大学 をリストアップ したい。 ●ほしい結果 すずき 4 山梨大学 田中 8 北海道大学 ですが、 クエリーのSQLです。 --------------------------- SELECT テーブル1.名前, Max(テーブル1.[No]) AS Noの最大, Max(テーブル1.大学) AS 大学の最大 FROM テーブル1 GROUP BY テーブル1.名前; ●現在の結果 すずき 4 東京大学 田中 8 北海道大学 となってしまいます。 SQLをどのように変えればいいのでしょうか? アドバイスをお待ちしています。

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

  • ベストアンサー
回答No.2

#1です。 ごめんなさい、さっきのSQLでは正しく取得できませんね(^^; SELECT テーブル1.名前, Max(テーブル1.[No]) AS No の最大, DLookup("大学", "テーブル1", "[No] = " & CStr(Max(テーブル1.[No])) & " AND 名前 = '" & テーブル1.名前 & "'") AS 大学の最大 FROM テーブル1 GROUP BY テーブル1.名前 でやってみてください。

taaaaaaa
質問者

補足

ありがとうございます。 Dlookup を使って上手くいきました。 フィールド、テーブル数、が多いデータで実行するとかなりSQLが複雑になってしまいますね。 テストデータ Access 実際のデータ オラクルをAccessから見に行く。 となっています。 テーブル5つ、データ数約7000だと構文が複雑になりすぎてエラーになってしまいます。 データベースの構造を工夫したほうがいいのかなと 思ってます。 なかなか難しいですね。

その他の回答 (5)

回答No.6

SELECT 名前,No,大学 FROM テーブル1 WHERE No IN (SELECT Max([No]) AS Noの最大 FROM テーブル1 GROUP BY 名前)

  • Gin_F
  • ベストアンサー率63% (286/453)
回答No.5

> サブクエリを利用する方法を試してみました。 > ただデータが多いと処理が重くなって止まってしまったりするようです。 たいして、速度的に差はないような気がしますが、以下では? SELECT 名前, [NO], 大学 FROM FROM テーブル1 WHERE ((テーブル1.[NO])=DMax("[NO]","テーブル1","[名前]='" & [名前] & "'")

回答No.4

クエリを複数作っても構わないようでしたら SELECT テーブル1.名前, Max(テーブル1.[No]) AS MaxNo FROM テーブル1 GROUP BY テーブル1.名前 まずこのように名前とMaxのNoだけを取得するSQLを作って 「クエリ1」の名前で保存し SELECT テーブル1.* FROM テーブル1 INNER JOIN クエリ1 ON (テーブル1.名前 = クエリ1.名前) AND (テーブル1.[No] = クエリ1.MaxNo) このようにテーブル1と等結合して クエリ1で取得された名前とMaxNoに一致するレコードのみを テーブル1から取得する事も可能だと思われます。

taaaaaaa
質問者

お礼

アドバイスありがとうございました。 サブクエリを利用する方法を試してみました。 上手く検索処理が出来ました。 ただデータが多いと処理が重くなって止まってしまったりするようです。 まあしょうがないですかね。

  • Gin_F
  • ベストアンサー率63% (286/453)
回答No.3

SELECT テーブル1.* FROM テーブル1 WHERE (((テーブル1.[NO])=(select max([NO]) from テーブル1 as T where テーブル1.[名前]=T.[名前] group by [名前]))); こちらもお試しください。

回答No.1

Max(テーブル1.大学) の記述では 「最大のNoに対応した大学名」ではなく 「大学名の中で最大のもの」を取得する形になってしまいます。 (おそらくは、大学名を音読み・50音順でならべた場合に最後尾となるものが取得されます) SELECT テーブル1.名前, Max(テーブル1.[No]) AS No の最大, DLookup("大学", "テーブル1", "[No] = " & CStr(Max(テーブル1.[No]))) AS 大学の最大 FROM テーブル1 GROUP BY テーブル1.名前 としてみてはいかがでしょうか。

関連するQ&A

  • アクセスのクエリについて教えてください。

    アクセス初心者です。 AテーブルとBテーブルを合体したCテーブルを作成したいのですが、 クエリを使って1工程でできませんでしょうか。 レコードが1000を越えると大変な作業になりますので、 何か良い方法を探しております。宜しくお願いします。 Aテーブル 顧客No  名前  住所  1     鈴木  東京  2     田中  横浜 Bテーブル 顧客No  名前  電話  1     鈴木  03  3     山田  044 Cテーブル 顧客No  名前  住所  電話  1     鈴木  東京  03  2     田中  横浜  3     山田      044              以上

  • クエリでカウントしつつ、チェックボックスを

    クエリでカウントしつつ、チェックボックスを使えるように(更新できるように)したいです。 アクセス2003です。 テーブル1(主キーなし) 名前   退職(Yes/No型) 佐藤   No 田中   No 佐藤   No から下のクエリを作りました。 SELECT テーブル1.名前, Count(テーブル1.名前) AS 名前のカウント, テーブル1.退職 FROM テーブル1 GROUP BY テーブル1.名前, テーブル1.退職; 結果、 名前 名前のカウント 退職 佐藤   2        No 田中   1        No となりますが、退職フィールドにチェックを入れることは出来なくなってしまいます。 カウントしつつ、更新可能なクエリにしたいのですが不可能でしょうか? 最終的には、このクエリ1をレコードソースとしてフォームに表示させたいです。 ご教示よろしくお願い致します。

  • アクセスの連番について

    アクセスでテーブルのkanri_Noという項目に管理番号を振りたいと思っています。 他のテーブルに後でインサートするので、そのテーブルのKanri_NOの最大値をKanri_Maxとして引いてきてそのKanri_Max+連番という風に振りたいのですが、どうSQLを入れればいいのか分かりません。 Kanri_Maxが4000だったら、4001、4002、4003・・・、Kanri_Maxが5000だったら5001、5002、5003とKanri_Noの項目に連番を振りたいのです。 連番を振る前のKanri_Noは空白です。 初心者で申し訳ないのですが教えてください。

  • Accessクエリ

    Accessのクエリでお教えください。 次のようなテーブルデータがあったとき 会員tbl 都道府県、区分、氏名 東京    1   山田 東京    1   田中 東京    2   佐藤 大阪    1   伊藤 福岡    2   鈴木 都道府県別区分別の件数を出したいのですがどのようなクエリにしたらできるのでしょうか。 都道府県、区分、件数 東京    1   2 東京    2   1 大阪    1   1 大阪    2   0 福岡    1   0 福岡    2   1 SELECT 会員tbl.都道府県, 会員tbl.区分, Count(会員tbl.氏名) AS 氏名のカウント FROM 会員tbl GROUP BY 会員tbl.都道府県, 会員tbl.区分; デザインビューで設定したものをSQLビューで表示したものです。 これですと次のようになってしまいます。 都道府県、区分、件数 東京    1   2 東京    2   1 大阪    1   1 福岡    2   1 0件も表示したいのです。

  • アクセスでSQLを実行させて値をとりたい

    masterテーブルに管理noをキーとしてデータが入っています。 管理noは完全に連番になっておらず、ただ新しく追加するものは 最大+1の番号を割り振るようにしようと思っています。 そこで新規追加のフォームを開くと管理noの欄に最大+1の番号が 表示され変更出来ない設定にします。 SQLで書くと select max(管理no)+1 from master でしょうか。 この命令を実行させて返ってきた数字を使いたいのです。 SQLを実行させる為の変数宣言の辺りから詳しくお願いします。 ちなみにMDBもフォームも同じアクセス2003のファイルにあります。

  • ソートについて

    従業員名前テーブル + 従業員住所テーブル 同じ県住所が多いとこから表示させたいのですが・・。 仮:北海道20人 東京100人 大阪70人の場合 SQL結果 佐藤 東京都港区 田中 東京都港区 山田 東京都港区 山下 東京都新宿区      ・      ・      ・ 遠藤 大阪府大阪市      ・      ・ 清水 北海道札幌市 のような結果が欲しいのですが 説明が下手かもしれませんが、宜しくお願いします。

  • ユニオンクエリで0と表示される。

    教えてください。 4つのテーブルをユニオンクエリでひとつにしたく以下のようにSQLに書きました。 SELECT ID AS フィールド1 ,No AS フィールド2, Remark AS フィールド3 FROM テーブル1 UNION ALL SELECT ID,No,Remark FROM テーブル2 UNION ALL SELECT ID,No,Remark FROM テーブル3 UNION ALL SELECT ID,No,Remark FROM テーブル4 フィールド2のNOには数字が入っているのですがフィールド2の列にはすべて0と表示されて数字がででてきません。ID(オートナンバー型)とRemark(短いテキスト型)はちゃんと表示されます。もとのテーブル1と2のNoは数値型 テーブル3と4のNoは短いテキスト型です。なにが原因でどうしたら数値が表示されるようになりますか?

  • ACCESSクエリーについて(条件抽出等3差分)

    こちらのクエリーを活用して経過日数を算出しているのですが、 http://okwave.jp/qa/q8769213.html (SQL構文) SELECT テーブル.ID, Max(テーブル.利用日) AS 直近利用日, Max(テーブル.利用回数) AS 利用回数, Sum(テーブル.利用金額) AS 利用金額合計, Min(DateDiff("d",[利用日],DateValue([yyyymmdd]))) AS 経過日数 FROM テーブル GROUP BY テーブル.ID; パラメータのyyyymmddには「2013/12/10」のように、区切り記号付きの日付を入力。 エクセル上で同じ日付-日付の経過日数でみると、エクセルの方が1多いのですが、これはエクセルが誤りでしょうか。 例 クエリー: 2014/09/27でパラメーターを指定  2014/05/13 が直近日付 = 137 例 エクセル: 2014/09/27とセルに入力 そこから右記のセルを引く 2014/05/13 が直近日付 = 136

  • Accessのクエリで複数カラムの最大値表示

    Accessのクエリで複数カラムの中から最大のカラムデータを表示させる方法をお教えください。 テーブル名:TBL カラムA,B,Cがあっていずれも整数です。 カラムA,B,Cの最大のデータを表示したいのです。 データの例 A B C 10 14 12 → 14 21 18 19 → 21 15 11 17 → 17 このときSQL文でいえば次のようにすればできるのでしょうが、IF関数2回使わないで一発で最大値を表示させられないでしょうか。 Select iif(A>=B,A,B) as D, iif(D>=C,D,C) as E from TBL; Select Max(A,B,C) as D from TBL; のようなのがないでしょうか?

  • 個数をクエリで求めたい

    記号番号 A  1 A  1 A  2 B  2 というテーブルがあるのですが、 これを クエリで 記号  番号 個数 A      1    2 A     2    1 B     2    1 という結果を出すにはどのようなSQL文を作ればよいでしょうか? SELECT Count([テーブル1].記号) AS 記号のカウント, Count([テーブル1].番号) AS 番号のカウント FROM テーブル1; これだと、 記号のカウント 番号のカウント 4            4 という結果になります。