2011-02-24 242 views
2

我有10個學生的記錄。需要SQL Server幫助

id markss 
1 50 
2 60 
3 40 
4 78 
5 45 
6 55 
7 35 
8 86 
9 56 
10 83 

現在我想顯示位置,即學生的第一,第二和第三位置。 任何人都可以幫助我找出這在SQL Server中。

+0

IS本次作業查詢?無論哪種方式在書籍上查找row_number()或rank(),並通過markss desc進行排序 – SQLMenace 2011-02-24 17:15:17

回答

0

對於SQL Server 2005+:

select id, markss, row_number() over (order by markss desc) as Position 
    from YourTable 
    order by Position 
3

的一種方式,如果你想使用空白DENSE_RANK(),如果你有相同分數,或純RANK(人)...

SELECT id, markss, DENSE_RANK() OVER(ORDER BY markss DESC) AS position 
FROM myTable 
ORDER BY markss DESC 

例如

CREATE TABLE #Mytable (id int,markss INT) 
INSERT #Mytable VALUES(1, 50) 
INSERT #Mytable VALUES(2, 60) 
INSERT #Mytable VALUES(3, 40) 
INSERT #Mytable VALUES(4, 78) 
INSERT #Mytable VALUES(5, 45) 
INSERT #Mytable VALUES(6, 55) 
INSERT #Mytable VALUES(7, 35) 
INSERT #Mytable VALUES(8, 86) 
INSERT #Mytable VALUES(9, 56) 
INSERT #Mytable VALUES(10, 83) 

現在添加重複分數

INSERT #Mytable VALUES(11, 86) 

使用3-排序函數

SELECT id, markss, 
DENSE_RANK() OVER(ORDER BY markss DESC) AS DensePosition, 
RANK() OVER(ORDER BY markss DESC) AS RankPOSITION, 
ROW_NUMBER() OVER(ORDER BY markss DESC) AS RowPosition 
FROM #Mytable 
ORDER BY markss DESC 

輸出

8 86 1 1 1 
11 86 1 1 2 
10 83 2 3 3 
4 78 3 4 4 
2 60 4 5 5 
9 56 5 6 6 
6 55 6 7 7 
1 50 7 8 8 
5 45 8 9 9 
3 40 9 10 10 
7 35 10 11 11