建立联盟表和显示位置

时间:2012-01-17 13:26:23

标签: sql sql-server

这让我很难过。这是一个非常简化的版本,但是假设我在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  

但我还希望在表格中显示特定的用户位置以及上面和下面的两个位置,就像第七位用户1一样:

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

我希望这是有道理的,任何帮助/见解都会受到高度赞赏。

1 个答案:

答案 0 :(得分: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