2012-01-17 12 views
1

これは私を困惑させる。これは非常に単純化したバージョンですが、のは、私のようなSQL Serverでユーザーのリーグテーブルを持っているとしましょう:ビルドリーグテーブルと表示位置

UserId Total 
1  10 
2  5 
3  20 
4  3 
5  40 
6  15 
7  22 
8  1 
9  18 
10  33 

今、私は簡単にそうように合計であることを、これを注文することができます:

Position UserId Total 
1   5  40 
2   10  33 
3   7  22 
4   3  20 
5   9  18 
6   6  15 
7   1  10 
8   2  5 
9   4  3 
10   8  1 

しかし、

Position UserId Total 
5   9  18 
6   6  15 
7   1  10 
8   2  5 
9   4  3 

私は、これは理にかなっていると、任意のヘルプ/洞察力が大幅だろう願っています:私はまた、テーブル内の特定のユーザーの位置と2の上方および下方ので、第七で、ユーザ1用等を表示したいと思います 感謝。

+0

SQL Serverのどのバージョンを使用していますか? – Lamak

答えて

2

あなたは試みることができる:

SELECT * FROM 
    (SELECT ROW_NUMBER() OVER (ORDER BY Total DESC) AS Position, 
      UserId, 
      Total 
    FROM your_table) p 
WHERE p.Position BETWEEN desiredId-2 AND desiredId+2 
+0

'ROW_NUMBER()'は 'OVER'節を必要とします。そうでなければ実行されません。この場合、 'ORDER BY Total DESC'は' OVER'の内部にあるはずです – Lamak

+0

@Lamak:はい、間違いないでしょう、私はそれを逃しました。ありがとう:) – Marco

+0

乾杯人、私は1つの選択のための方法があることを望んでいたが、私はこれを見て、私はあなたが持っている例を使用して、ユーザーの位置を取得し、次に別の選択を行う必要があることを確認したと思います上に置く。多くのおかげで、私はこれを最善の解決策にします。 – user351711

関連する問題