Access2003で一つのクエリでグループ数の最大値を算出する方法

このQ&Aのポイント
  • Access2003を利用しており、検品テーブルの一つのクエリで一つのラインでのグループ数の最大値を算出したいと考えています。
  • 現在は3つのクエリを使用して最大値を算出していますが、一つのクエリで行いたいと思っています。
  • ご教授いただけますと幸いです。
回答を見る
  • ベストアンサー

Access2003一つのクエリで結果を出したい2

お世話になります。 Access2003を利用しておりますが、一つのクエリで以下の算出(抽出?)は可能でしょうか。 検品テーブル  ・ID  ・ライン  ・グループ  ID ライン グループ  1  L1    G1  2  L1    G1  3  L1    G2  4  L1    G2  5  L1    G2  6  L2    G3  7  L2    G3  8  L3    G4  9  L3    G4  10  L3    G4  11  L3    G4  12  L3    G5  13  L3    G5  14  L3    G6  15  L4    G7 結果として、一つのラインでのグループ数の最大値(上記の例だとL3はグループが3つあるので3)を一つのクエリで算出したいと考えております。 以下のように3つのクエリを作成すれば結果は得られるのですが、できれば一つのクエリでやりたいところです。  (1)検品テーブルを、[ライン]と[グループ]でグループ化    L1 G1    L1 G2    L2 G3    L3 G4    L3 G5    L3 G6    L4 G7  (2)上記クエリをグループ化し[グループ]をカウント    L1 2    L2 1    L3 3    L4 1  (3)上記クエリでグループカウントの最大値      3 この最大値3を算出するのを一つのクエリで行いたいのですが、可能でしょうか。 ご教授お願い致します。

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

  • ベストアンサー
  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.2

MS-Access 2000での例。

naoto0216
質問者

お礼

ご回答ありがとうございます。 早速教えて頂いたSQLを元に試してみたところうまくいきました。 ありがとうございました。

その他の回答 (1)

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.1

サブクエリを使えばできます。 SELECT TOP 1 COUNT(A.グループ) AS C FROM (SELECT A.ライン,A.グループ FROM 検品テーブル AS A GROUP BY A.ライン,A.グループ) AS A GROUP BY A.ライン ORDER BY COUNT(A.グループ) DESC

naoto0216
質問者

お礼

ご回答ありがとうございます。 勉強不足ですみません。 上記例で、L1でもグループが3つ存在した場合、結果は1レコード抽出されますでしょうか。 実際には他にも抽出条件があり、それを踏まえて教えて頂いたSQLを試したころ3が2レコード抽出されてしまいます。 単純に私の構文に間違いがあるのかもしれませんが。。 ありがとうございました。

関連するQ&A

  • Access2003 一つのクエリで結果を出したい

    お世話になります。 下記テーブルを紐付けてクエリを作成します(Access2003)。 受注テーブル  ・ID  ・コード  ・数量 検品テーブル  ・ID  ・コード  ・検品フラグ マスターテーブル  ・ID  ・コード  ・印刷フラグ 検品テーブルのレコードは、受注テーブルの数量合計が展開されたレコード数となります。例えば、AAAというコードで数量合計が8の場合、検品テーブルではAAAのレコードが8レコード存在することになります。 但し、マスターテーブルの印刷フラグがYesとなっているものは、数量がいくつあっても受注テーブルは1レコード作成されます(数量合計で展開しない)。  受注テーブル   ID コード 数量   1  AAA   5   2  AAA   3   3  BBB  100  検品テーブル   ID コード 検品フラグ   1  AAA   Yes   2  AAA   Yes   3  AAA   Yes   4  AAA   Yes   5  AAA   Yes   6  AAA   Yes   7  AAA   No   8  AAA   Yes   9  BBB   Yes  マスターテーブル   ID コード 印刷フラグ   1  AAA   No   2  BBB   Yes こんな感じです。 そこで各テーブルをコードで紐付けてグループ化し、検品フラグYesで抽出した状態で以下の結果を表示出来るようにしたいところです。 コード 数量合計  AAA   7  BBB  100 要するに印刷フラグがYesのものは受注テーブルの数量合計を表示し、それ以外は検品された数を表示させたいと考えています。 あらかじめ受注テーブルでコードでグループ化し、数量の合計を算出するクエリ(※1)を作成し、そのクエリと検品テーブル、マスターテーブルを紐付けたらうまく表示出来ました。 ※数量合計はIIFで印刷フラグ=Yesの場合は※1の数量合計を、Yesではない場合は検品テーブルのレコードカウント数を表示。 しかし、できれば一つのクエリで上記の結果を表示させたいのですが、可能なのでしょうか。 ご教授お願い致します。

  • 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つのクエリで 上記イメージでの結果を表示したいと思ってます。 可能でしょうか? ご教授願います。

  • Accessクエリ

    お世話になります。 Access初学者です。 グループごとに日付が最大のレコードを、それぞれ1件抽出するクエリを作成したいと思っています。 IDを表示させなければできるのですが、IDを表示させると全レコードが抽出されます。どのようにすればいいのでしょうか? よろしくお願いします。

  • 【Access】選択クエリのグループ化で最大日付の中の最大IDを抽出する方法?

    「製品の販売状況が記録してあるテーブル」から、Accessの選択クエリのグループ化を利用して、「1つの製品番号に対し、最大日付の中の最大IDを抽出する」というアクションを行いたいのです。 例えば下の<テーブル例>だったら、  ●製品100・・・2004/08/20 ID3 販売停止  ●製品111・・・2004/05/10 ID6 出荷停止 を取り出したい訳です。 ・製品番号(グループ化/昇順) ・日付(グループ化/昇順/最大) ・ID(グループ化/昇順/最大) という選択クエリを組んだのですが、抽出結果は  ●製品100・・・2004/08/20 ID9 販売停止  ●製品111・・・2004/05/10 ID6 出荷停止 を選んでしまいます。 違うのに! そんな事したいんじゃないのに!(ToT) どなたか詳しい方、助けてください。 <アクション> 製品の販売状況が記録してあるテーブルから、『最大の日付で最大のID』の「販売状況」を抽出したい。 <テーブル例> 製品番号 日付   ID 販売状況 100 2003/02/01  4 終了 100 2004/07/01  9 出荷停止 100 2004/08/01  2 一時出荷停止 100 2004/08/20  3 販売停止 100 2004/08/20  1 終了 111 2003/01/15 5 終了 111 2004/05/10 6 出荷停止 111 2004/05/10 2 終了

  • access2000 クエリーについて

    access2000を使っています。 クエリーの抽出条件をいちいちデザインビューで入れるのが面倒です。 クエリーを開く時に抽出条件を聞いてくれるようにしたり、フォームのリストボックスをクリックするとその条件のクエリーが出てくるように出来ないでしょうか? 例を挙げておきますと、テーブル(生徒テーブル:(1)生徒ID(2)生徒名(3)Tel(4)クラス クラステーブル:(1)クラスID(2)クラス名(3)担当者)で生徒テーブルの(4)クラスとクラステーブルがリンクしてあります。 それで、あるクラスの生徒を出したいのです。いかがでしょう。

  • ACCESS2003でクエリの質問です

    クエリを教えて下さい。 ACCESS2003でクエリを作成したいのですが テーブルに以下のようにデータが入っています。 ID   日付   項目あ 項目い 項目う 項目え 項目お 001 2009/08/27  A         B    C 001 2008/08/27  D    E         F    G 002 2009/08/27       H         I 002 2008/08/27  K    L         M 002 2007/08/27  K    L    O    M 同一IDで日付の新しいレコードを抽出するのですが、 もしNULLの項目があれば、日付の古いレコードから編集したいです。 結果としては以下のようなテーブルを作成したいです。 [002]の[項目お]の様に過去日付のものがNULLであれば編集はしません。 ID   日付   項目あ 項目い 項目う 項目え 項目お 001 2009/08/27  A    E    B    C    G 002 2009/08/27  K    H    O    I また以下のように過去日付のデータが異なる場合は 事前のチェックでエラーとして別テーブルに出すように考えていますが、 こちらも合わせて教えていただけると助かります。 ID   日付   項目あ 項目い 項目う 項目え 項目お 003 2009/08/27  N    O    P         Q 003 2009/08/27  N    O    P    R    Q 003 2009/08/27  N    O    P    S    Q SQLが苦手で困っています。 宜しくお願いします。

  • access2010 クエリ抽出

    Access初心者です。 Access2010でのクエリ抽出について 下のようなテーブルがあります。 年,月,受注NO,精算カウンタ,紹介区分,紹介者コード 2013,4,11111,1,01,000001 2013,4,11112,1,01,000001 2013,4,11113,1,01,000002 2013,4,11111,2,01,000002 2013,4,11114,1,02,000003 2013,4,11115,1,02,000002 2013,4,11114,2,01,000001 2013,4,11114,3,01,000002 このテーブルから、下記のように精算カウンタが最大のものを抽出したいのですが、 どのようにグループ化をすればよいのかわかりません。 2013,4,11111,2,01,000002 2013,4,11112,1,01,000001 2013,4,11113,1,01,000002 2013,4,11114,3,01,000002 2013,4,11115,1,02,000002 ご教授いただけると幸いです。 よろしくお願いします。

  • アクセス クエリ・集計・計算方法について

    アクセスの集計機能を使用して、品名毎の数量の合計と金額の合計を算出しようとしていますが、 思うようにできません。どなたか教えてください。 クエリのフィールドを左から・・・ (1)年月: Format([日付],"yyyy/mm")(集計:グループ化) (2)品名(集計:グループ化) (3)品名のカウント(集計機能:カウント) (4)単価(集計:グループ化) (5)金額: [単価]*[品名のカウント](集計:グループ化) このような形でクエリを実行していますが、すべての注文が1つだけなら問題ないのですが、実際には品名には数量が掛けられている場合もあり、現在設定しているクエリ設定では正しい数量の合計と金額の合計を出すことができません。どうか集計方法をご教授いただけないでしょうか。よろしくお願いします。 ■現在のテーブルの設計とリレーションを明記します。 【A】顧客テーブル (1)顧客ID (2)発注コード (3)氏名 【B】商品テーブル (1)商品ID (2)品名 (3)単価 【C】注文テーブル (1)注文ID (2)日付 (3)顧客ID 【D】注文明細テーブル (1)注文明細ID (2)注文ID (3)商品ID (4)数量 リレーション 【A】(1)-【C】(3) 【B】(1)-【D】(3) 【C】(1)-【D】(2)

  • Accessのクエリについて【初心者】

    Accessに詳しい方がいらしたら教えて下さい。 名前,金額 01,1000 02,2000 03,3000 04,4000 05,5000 のテーブルがあって 金額が2000以上のものを抽出し、かつ抽出された項目の金額を-2000するクエリはどのようなものになりますか? 上記の実行をした場合の結果は下記をイメージしてます。 2000以下のものは出力もされない。 03,1000 04,2000 05,3000 ----- 金額 > 2000まではわかるのですが、引くことができないです。。 わかる方がいましたら助言頂きたいです。

  • 【Access2010】グループ化について

    お世話になります。 テーブルのグループ化につきましてご教授願います。 あるテーブルに、  ・ID  ・ケースID  ・メモ  ・登録日  ・登録時 というフィールドがあります。 例えば、ケースID:100で抽出すると以下のようになります。 ID ケースID メモ 登録日 登録時 1  100    xxx  2014/05/10 10:00 2  100    xxx   2014/05/10 10:30 3  100    xxx   2014/05/11 10:10 4  100    xxx   2014/05/12 09:20 そこで、当該ケースIDの最終登録日時を求める為、  ケースID:グループ化 (条件 100)  登録日:最大  登録時:最大 というクエリを作成しました。 結果は、 ケースID 登録日  登録時 100    2014/05/12 10:30 となりました(要するに登録日と登録時のそれぞれの最大)。 本来であれば、2014/05/12 09:20が抽出されて欲しいところですが そもそもクエリで2014/05/12 09:20を抽出することは可能なので しょうか。 登録日 & 登録時 にして最大とすればよいかと思うのですが このやり方以外で何かよい方法があればご教授願います。 なお、以下のようなケースもあるので最後のレコードをひっぱって くればよい・・という訳でもありません。 ID ケースID メモ 登録日 登録時 1  100    xxx  2014/05/10 10:00 2  100    xxx   2014/05/10 10:30 3  100    xxx   2014/05/11 10:10 4  100    xxx   2014/05/12 09:20 5  100    xxx 2014/05/11 17:00 以上、宜しくお願い致します。