こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

【アクセス2010】フィールドの最大値のみ表示

アクセス2010を使用しています。
下記のようなテーブルがあり、クエリを使ってそれぞれの「ID」に紐づいている「区分」の最大値のみを表示させたいです。

ID 区分 年月
10 100 2011/1/1
10 110 2011/3/8
10 150 2015/4/1
13 110 
13 140 
21 140 2016/12/7
21 160 2017/7/7
21 150 2017/1/8
「年月」を最大で集計すると、年月が入っていないIDが重複して出てきてしましますが、
「区分」を最大で集計しても、すべてのデータが表示されます。

アクセスを触り始めたばかりなので、詳細に(どこを押す、どの欄になにを書く等)教えていただけますととても助かります。

よろしくお願いいたします。

投稿日時 - 2017-07-27 17:57:36

QNo.9356517

困ってます

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

元になるテーブルのデータにさらなる条件が存在するならば
早めにすべて書いておくほうがいいのですが。一応データは
質問のようなものとして回答しておきます。

一つのクエリにまとめることもできますが、それは最後に表示するとして、
わかりやすく二つのクエリでデータを表示することにします。
まず、質問の主旨は、
「「ID」に紐づいている「区分」の最大値」
を取り出すということですから、質問の
テーブルの「ID」と「区分」だけに注目して、
テーブル名は「元テーブル」としておきます。

*********** クエリ「Q1」の作成 **************
(1)
クエリのデザインビューで、質問の「元テーブル」を表示。
(2)
「ID」と「区分」だけをフィールドに表示。
(3)
「集計」をクリックすると、デザインビューに「集計」という
項目が表示される。「ID」と「区分」のそれぞれに「グループ化」
と、表示が入る。
(4)
「区分」の「グループ化」と表示されているところを
クリックして表示されたリストから「最大」を選択。


フィールド    ID       区分の最大:区分
テーブル   元テーブル      元テーブル
集計     グループ化      最大


以上を実行してこのクエリを「Q1」して保存します。


************ クエリ「Q2」の作成 *************
(1)
新しいクエリをデザインビューで表示し、テーブルの表示で
「元テーブル」とクエリ「Q1」を選択しデザインビューに
表示する。どちらが右でも左でもかまいません。
なお、「Q1」のフィールド名は「ID」と「区分の最大」
となっていると思います。
(2)
表示された「元テーブル」の「ID」をクリックしてそのまま
「Q1」の「ID」にもっていって離すと、「ID」同士で線が
引かれる。これを確認。
(3)
同じように、「元テーブル」の「区分」と「Q1」の「区分の最大」
とを線で結ぶ。
(4)
次に肝心の「年月」を「元テーブル」の「年月」から選択し、
クエリのフィールドに追加する。これで選択された「ID」と
「区分」の条件を満たす「年月」が表示される。

フィールド    ID       区分の最大     年月
テーブル     Q1         Q1      元テーブル



以上で、出来上がりです。クエリ「Q2」をクリックすると
必要なデータが表示されると思います。なお、

たとえば、


D 区分 年月
10 100 2011/1/1
10 110 2011/3/8
10 150 2015/4/1
10 150 2015/5/3
13 110 
13 140 
21 140 2016/12/7
21 160 2017/7/7
21 160


のような場合は、

ID  区分の最大年月
10   150      2015/04/01
13   140
21   160      2017/07/07
10   150      2015/05/01
21   160


のような、結果がクエリで示されます。
つまり、最大値が二つ存在する場合は
何月が違えば両方表示されます。
さらに年月にも最大値を設定してふるいに
かけることもできますが、年月が抜けて
いるような場合はどうするのか、など面倒な
条件が重なるのであまり深追いをすることは
控えておきます。

なお、これを一つのクエリにすれば、

SELECT Temp.ID, Temp.区分の最大, 元テーブル.年月
FROM 元テーブル INNER JOIN (SELECT 元テーブル.ID, Max(元テーブル.区分) AS 区分の最大
FROM 元テーブル
GROUP BY 元テーブル.ID) AS Temp ON (元テーブル.区分 = Temp.区分の最大) AND (元テーブル.ID = Temp.ID);

と、なります。新しいクエリでSQLビューに貼り付け、デザインビューで確認してみてください。

投稿日時 - 2017-07-28 01:06:29

お礼

piroin654さん
非常にわかりやすい手順を明示くださりありがとうございました。
クエリを二つに分けることを、初めて勉強しました。
そのあとのSQLコードも、実態に合わせて修正し、自分がほしいとしているデータビューを出すことができました。
このあとフォームのソースにしていきます。
本当にありがとうございました。

投稿日時 - 2017-07-28 15:58:32

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問