◎Microsoft Access ちょっと役立つ? 小技集
このサイトには色々な方法が載っている。
- クエリーによる順位付け
- サブクエリーによる順位付け
- ビューによる順位付け
- ストアドプロシージャによる順位付け
- スカラー関数による順位付け
- プロシージャによる順位付け
- プロシージャによる順位付け(ADO)
◎Access での順位付け(Mr.Big のホームルーム)
ここでは比較的簡単なクエリーを利用する方法を紹介します。なお、この方法は pPoy さんに教えていただきました。(pPoy さん、ありがとうございました。m(_ _)m )
説明のために、テーブル名が[T_成績]というテーブルがあり、その中に
フィールド名:[出席番号]
フィールド名:[得点]
という2つのフィールドがあるとします。
これを前提として以下の手順でクエリーを作ります。
- まず、新規にクエリーを作ります。これはただの選択クエリーで、[T_成績]テーブルを1個だけ追加します。
- クエリーグリッドのフィールド欄に[出席番号]と[得点]を追加します。
- 最後のフィールドに順位を求める式を入力します。式は以下の通りです。
順位: (select count(*) from T_成績 as T_成績_1 where T_成績_1!得点>T_成績!得点)+1- このクエリーを保存して実行してみてください。
◎クエリで順位をつける(Microsoft Access Club)
[合計 粗利]で順位を付けるのなら
SELECT (SELECT COUNT(T2.担当者) FROM 順位 AS T2 WHERE T2.[合計 粗利]>= T1.[合計 粗利]) AS 粗利順位, T1.担当者, T1.合計, T1.[合計 粗利] FROM 順位 AS T1
◎グループごとに順位を付ける方法(基礎から始めるACCESS VBA講座)
下のテーブル(名前:T_成績)の「順位」フィールドに、クラスごとに順位を書き込むプロシジャです。同点の場合は同じ順位を書き込みます。
:
:
■サンプルプロシージャ
「クラス」を昇順、「得点」を降順でレコードセットを作成し順位を書き込んでいきます。クラスが変わったかどうかは変数Tempクラスに前のレコードのクラス名を保存しておき、カレントレコードのクラス名と比較しています。クラスが変わったとき変数 i と j をリセットしています。
得点が変わったかどうかは、変数Temp得点に前のレコードの得点を保存しておきカレントレコードの得点と比較しています。変数 i はクラスごとの累計数で、得点が変わったとき、順位を表す変数 j に i の値を代入しています。