- ベストアンサー
アクセスで順位付けしたいのですが・・・
成績表などをアクセスで作って管理していますが、順位をつけたいときはどうしたらいいのでしょうか? RANK関数みたいなものがあればいいのですが・・・。エクセルで別にランクをつけたものをインポートしなおとだめなんでしょうか?
- みんなの回答 (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すれば、自分の順位となりますよね? ちょっと難しいですが、自分の表の構造にあわせて、テーブル名と、フィールド名を書き換えてみて実験してみてください。
お礼
丁寧に教えていただいてありがとうございます。 さっそくやってみたら、できました。あとは応用的にどう使いこなせるかですね。 本当にありがとうございました。