Accessテクニックのホームへ戻る

■ 注文件数が6件以上の得意先を抽出する (2000, 2002, 2003,2007)

 

得意先テーブルと受注テーブルから注文件数が6件以上の得意先を抽出するクエリを作成します。受注テーブルから注文件数が6件以上の得意先IDを抽出するには、GROUP BY句とHAVING句を使用します。

 

1. 新規データベース作成

Accessを起動したら、ツールバーから新規作成のアイコンをクリックして、作業フォルダworkに新規データベース077.mdbを作成します。

 

2. テーブルをインポート

メニューバーから[ファイル][外部データの取り込み][インポート]を選択します。「インポート」のダイアログが表示されたら、077.mdb(このページの最後からダウンロードできます)を選択して[インポート]ボタンをクリックします。

 

オブジェクトのインポート」が表示されたら、[テーブル]タブから[tbl得意先][tbl受注]をクリックして選択します。[OK]ボタンをクリックしてインポートを開始します。インポートが完了すると、データベースウィンドウにインポートしたテーブルが表示されます。

 

3. 新規クエリ作成

データベースウィンドウのオブジェクトから[クエリ]をクリックして選択したら、新規オブジェクトのショートカットから[デザインビューでクエリを作成する]をダブルクリックします。「テーブルの表示」ダイアログが表示されたら、何も選択しないで[閉じる]ボタンをクリックしてダイアログを閉じます。

 

クエリのデザインビューが表示されたら、ツールバーからSQLビューのアイコンをクリックします。SQLビューが表示されたら、次のSQLステートメントを入力します。

 

SELECT tbl得意先.得意先ID, tbl得意先.得意先名

FROM tbl得意先

WHERE tbl得意先.得意先ID IN

(SELECT tbl受注.得意先ID FROM tbl受注

GROUP BY tbl受注.得意先ID HAVING COUNT(*) > 6);

 

ツールバーから上書き保存のアイコンをクリックしたら「qry注文件数が6件以上の得意先を抽出の名称で保存します。

 

新規クエリを作成したら「qry注文件数が6件以上の得意先を抽出」の名称で保存

 

 

4. サブクエリ実行

ツールバーから実行のアイコンをクリックして、サブクエリを実行します。データシートに過去3年間注文がなかった得意先が1件表示されます。

 

注文件数が6件以上の得意先を表示する

 

●解説

 

受注テーブルから注文件数が6件以上の得意先IDを抽出するには、GROUP BY句で得意先IDを集計してHAVING句にCOUNT(*) > 6の抽出条件を設定します。

 

SELECT tbl受注.得意先ID FROM tbl受注

GROUP BY tbl受注.得意先ID

HAVING COUNT(*) > 6

 

得意先テーブルからこのクエリに含まれている得意先を抽出するには、INを使用して次のようなWHERE句を作成します。

 

WHERE tbl得意先.得意先ID IN

(SELECT tbl受注.得意先ID FROM tbl受注 GROUP BY tbl受注.得意先ID HAVING COUNT(*) > 6)

 

WHERE句の得意先ID IN (SELECT...)は、サブクエリに含まれている得意先を抽出することを意味します。後は、親のSELECTステートメントにこのWHERE句を追加すると、目的のクエリが完成します。

 

完成したサブクエリ:

 

SELECT tbl得意先.得意先ID, tbl得意先.得意先名

FROM tbl得意先

WHERE tbl得意先.得意先ID IN

(SELECT tbl受注.得意先ID FROM tbl受注 GROUP BY tbl受注.得意先ID HAVING COUNT(*) > 6);

 

Tip

得意先が3件以上の都道府県を表示する

 

ここで作成したサブクエリを応用すると、得意先の件数が3件以上の都道府県を表示させることができます。サブクエリには、GROUP BY句とHAVING句を追加して得意先の件数が3件以上の都道府県を抽出します。親のWHERE句にINと組み合わせたサブクエリを追加すると、目的のクエリが完成します。都道府県を重複させたくないときは、親のクエリにDISTINCTを追加します。

 

SELECT DISTINCT tbl得意先.都道府県

FROM tbl得意先

WHERE (((tbl得意先.都道府県) IN

(SELECT 都道府県 FROM [tbl得意先] GROUP BY 都道府県 HAVING Count(*)>3 )));

 

 

 

Tip

フィールド値が重複するレコードを見つける

 

ここで作成したクエリを応用すると、得意先テーブルの得意先、担当者名、電話番号などが重複するレコードを抽出することができます。また、既にレコードが登録されているテーブルに主キーを設定するとき、主キーがユニークかどうか調べることができます。

 

たとえば、得意先重複有のテーブルから得意先名が重複しているレコードを抽出するには、サブクエリにGROUP BY句とHAVING句を追加します。GROUP BY句には、得意先名、HAVING句には、COUNT(*) > 1を指定します。

 

SELECT 得意先ID, 得意先名

FROM tbl得意先重複有

WHERE 得意先名 IN

(SELECT 得意先名 FROM tbl得意先重複有 GROUP BY 得意先名 HAVING COUNT(*)>1);

 

 

 

ダウンロード (077.lzh)