• ベストアンサー

アクセスで順位付けしたいのですが・・・

成績表などをアクセスで作って管理していますが、順位をつけたいときはどうしたらいいのでしょうか? RANK関数みたいなものがあればいいのですが・・・。エクセルで別にランクをつけたものをインポートしなおとだめなんでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • mitoneko
  • ベストアンサー率58% (469/798)
回答No.1

ちょっと、SQLの知識が必要ですが・・・  次の例は、ACEESS2000で実験しています。もしかすると、古いaceessではできないかもしれません。  たとえば、得点というテーブルが次の構造であるとします。 name 文字列 ten 数値  これをtenが大きい順に順位を付けるものとしましょう。  選択クエリーを作成します。  元テーブルは、得点です。  nameとtenのフィールドは、そのままクエリーの結果に表示するように、素直に設定しておきます。  3つめのフィールドが問題です。  これは、順位のフィールドになりますが、ここのフィールド欄には、次のように入力します。(フィールド欄で、CTRL+F2を押して、式ビルダを立ち上げておくと入力しやすいです。) (select count(*)+1 from 得点 tbl2 where 得点.ten < tbl2.ten)  外側の「()」(半角です。)を含めてすべて入力してください。  これで、このクエリーの結果を表示すると、式1というフィールドに順位が表示されているはずです。  ただ、残念なことに、このフィールドには、「並べ替え」を設定することができません。  順位で並べ替えるのであれば、このクエリーをたとえば、「順位」という名前で保存して、新しいクエリーを作り、順位のすべてのレコードを、「式1」でソートするようにします。  さて、先ほど、フィールド欄に直接入力した式をSQL文といいます。  実は、aceessのヘルプには、この文の使い方はほとんど掲載されていません。  単純に説明しておくと、同じ得点テーブルをもう一つ開いてtbl2という名前にしたとき「FROM 得点 tbl2」、元の得点テーブルの点数より大きいもの「WHERE 得点.ten < tbl2.ten」が、いくつあるかを表示する「SELECT COUNT(*)」と書いてあります。  自分より得点が高い人の数に+1すれば、自分の順位となりますよね?  ちょっと難しいですが、自分の表の構造にあわせて、テーブル名と、フィールド名を書き換えてみて実験してみてください。

ki3519
質問者

お礼

丁寧に教えていただいてありがとうございます。 さっそくやってみたら、できました。あとは応用的にどう使いこなせるかですね。 本当にありがとうございました。

関連するQ&A