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中。
我有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中。
對於SQL Server 2005+:
select id, markss, row_number() over (order by markss desc) as Position
from YourTable
order by Position
的一種方式,如果你想使用空白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
IS本次作業查詢?無論哪種方式在書籍上查找row_number()或rank(),並通過markss desc進行排序 – SQLMenace 2011-02-24 17:15:17