まりふのひと

順位づけの方法

Microsoft Access ちょっと役立つ? 小技集

このサイトには色々な方法が載っている。

  • クエリーによる順位付け
  • サブクエリーによる順位付け
  • ビューによる順位付け
  • ストアドプロシージャによる順位付け
  • スカラー関数による順位付け
  • プロシージャによる順位付け
  • プロシージャによる順位付け(ADO)
Access での順位付けMr.Big のホームルーム)

ここでは比較的簡単なクエリーを利用する方法を紹介します。なお、この方法は pPoy さんに教えていただきました。(pPoy さん、ありがとうございました。m(_ _)m )
 説明のために、テーブル名が[T_成績]というテーブルがあり、その中に
   フィールド名:[出席番号]
   フィールド名:[得点]

という2つのフィールドがあるとします。
 これを前提として以下の手順でクエリーを作ります。

  1. まず、新規にクエリーを作ります。これはただの選択クエリーで、[T_成績]テーブルを1個だけ追加します。
  2. クエリーグリッドのフィールド欄に[出席番号]と[得点]を追加します。
  3. 最後のフィールドに順位を求める式を入力します。式は以下の通りです。
      順位: (select count(*) from T_成績 as T_成績_1 where T_成績_1!得点>T_成績!得点)+1
  4. このクエリーを保存して実行してみてください。
クエリで順位をつける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 の値を代入しています。