Microsoft Access Club Access超初心者対象Forum Access初・中級者対象Forum Access VBA Tips Forum DAO、ADO、SQL Forum

     

リストへもどる

投稿記事の一括表示

タイトル3列の最大レコードの取得
記事No83070
投稿日: 2017/02/14(Tue) 00:05
投稿者バン
OS:windows7
Access Version:access2013

以下のようにt_kihon_data テーブルから t_kihon_data最大テーブルに
職員別で最大実績地区を集計したいです。

テーブル t_kihon_data → テーブル t_kihon_data最大

地区 | 職員No | 実績    地区 | 職員No | 実績
1 | A | 5000     1 | A | 5000
2 | A | 3500     3 | B | 4000
3 | B | 4000 →    2 | C | 9000
1 | B | 2000
3 | C | 1500
2 | C | 9000

現在、思いついている方法として、q_最大(職員Noでグループ化、実績最大)を作成して、
t_kihon_dataに職員Noと実績で結び付けて、t_kihon_data最大へ挿入。
その後、最大実績地区が複数あった職員は重複クエリで抽出、地区が一番若いレコードのみ残し、
手作業で削除という方法を考えています。

しかし、1,2回のSQLで抽出出来るようなきれいな方法があるのではと考え、
アドバイスを頂けたらと思います。どうぞよろしくお願いいたします。

タイトルRe: 3列の最大レコードの取得
記事No83071
投稿日: 2017/02/14(Tue) 20:14
投稿者mayu
こんばんは。

> 1,2回のSQLで抽出出来るようなきれいな方法

複数のクエリを結合させて
目的の結果セットを得る方法は ご存知のようなので
相関サブクエリを使った方法を、2パターン載せておきますね。


【 1 】
--------------------------------------------------------

SELECT * FROM t_kihon_data x
WHERE NOT EXISTS
( 
    SELECT 1 FROM t_kihon_data y
     WHERE y.職員No = x.職員No
       AND ( y.実績 > x.実績
                OR
             y.実績 = x.実績 AND y.地区 < x.地区
           )
)

--------------------------------------------------------


【 2 】
--------------------------------------------------------

SELECT * FROM t_kihon_data x
WHERE 地区 =
(
    SELECT Min( 地区 ) 
      FROM t_kihon_data y
     WHERE y.職員No = x.職員No
       AND 実績 = (
               SELECT Max( 実績 ) FROM t_kihon_data z
                WHERE z.職員No = y.職員No
           )
)

--------------------------------------------------------

 では ☆

- 以下のフォームから自分の投稿記事を修正・削除することができます -
処理 記事No パスワード

ページの先頭へ 前ページへ戻る