数値の大小に基づき順位をつける

f:id:accs2014:20170216230803p:plain:right:w400

 Accessには、ExcelのRANK関数のように直接的に順位を求める関数がありませんが、DCount関数を利用することで順位を求めることができます。
 例として右のようなテーブルを用い、「点数」列の値が大きい順に順位をつけてみます。


f:id:accs2014:20170216230801p:plain:right:w400

 クエリで求めてみましょう。
 次のような列を設けます。



順位: DCount("*","成績テーブル","点数 >" & [点数])+1

 要は、当該レコードの点数より点数が高いレコードの数を数え、それに1を足すというわけです。これで順位が求まります。


f:id:accs2014:20170216230757p:plain:right:w400

 データシートビューです。
 当たり前ですが同点で同順位になっていることも確認できます。


f:id:accs2014:20170216230756p:plain:right:w400

 DCount関数の仕様に基づき、さまざまな条件を課すこともできます。
 次の例として、「所属」列の値によりレコードを区別し、それぞれの値ごとに順位をつけます。
 つまり、山田小学校と鈴木小学校のそれぞれの生徒ごとに1番から順位をつけます。



所属別順位: DCount("*","成績テーブル","所属 = '" & [所属] & "' AND 点数 >" & [点数])+1

 当該レコードと「所属」の値が同じで、かつ点数が高いレコードの数を数え、それに1を足しているというわけです。
 なお、2つあるシングルクオーテーション(')の存在に注意してください。これがないとテキスト型である「所属」の値の比較がうまくできません。


f:id:accs2014:20170216230755p:plain:right:w400

 データシートビューです。
 所属と順位でソートした方が見やすかったですね;-o-)