@
reus @
alpenstock 更新一下代码,之前没有看清楚描述。
--drop table #SCORE
CREATE TABLE #SCORE
(NAME varchar(32) not null
,GRADE INT not null
)
-- 100 分 7 个 99 分 1 个 98 分 1 个 97 分 6 个
insert #SCORE(NAME,GRADE) values('学生 1',100)
insert #SCORE(NAME,GRADE) values('学生 2',100)
insert #SCORE(NAME,GRADE) values('学生 3',100)
insert #SCORE(NAME,GRADE) values('学生 4',100)
insert #SCORE(NAME,GRADE) values('学生 5',100)
insert #SCORE(NAME,GRADE) values('学生 6',100)
insert #SCORE(NAME,GRADE) values('学生 7',100)
insert #SCORE(NAME,GRADE) values('学生 8',99)
insert #SCORE(NAME,GRADE) values('学生 9',98)
insert #SCORE(NAME,GRADE) values('学生 10',97)
insert #SCORE(NAME,GRADE) values('学生 11',97)
insert #SCORE(NAME,GRADE) values('学生 12',97)
insert #SCORE(NAME,GRADE) values('学生 13',97)
insert #SCORE(NAME,GRADE) values('学生 14',97)
insert #SCORE(NAME,GRADE) values('学生 15',97)
insert #SCORE(NAME,GRADE) values('学生 17',60)
insert #SCORE(NAME,GRADE) values('学生 18',40)
insert #SCORE(NAME,GRADE) values('学生 19',30)
--DROP TABLE #ROW_SCORE
SELECT
t.NAME,t.GRADE,ROW_NUMBER() OVER(ORDER BY GRADE desc) ROW,DENSE_RANK() over(order by grade desc ) RANK
INTO #ROW_SCORE
from #SCORE t
SELECT
t.NAME,t.GRADE,t.ROW,t.RANK
FROM #ROW_SCORE t
JOIN #ROW_SCORE ten ON ten.ROW=10
where CASE WHEN t.ROW<10 THEN 1
WHEN t.RANK=ten.RANK THEN 1
ELSE 0 END =1
执行结果:
NAME GRADE ROW RANK
学生 1 100 1 1
学生 2 100 2 1
学生 3 100 3 1
学生 4 100 4 1
学生 5 100 5 1
学生 6 100 6 1
学生 7 100 7 1
学生 8 99 8 2
学生 9 98 9 3
学生 10 97 10 4
学生 11 97 11 4
学生 12 97 12 4
学生 13 97 13 4
学生 14 97 14 4
学生 15 97 15 4