34,838
社区成员




IF OBJECT_ID('tempdb..#Score') IS NOT NULL
DROP TABLE #Score
--数据如下:
Create Table #Score
(
[课程] varchar(10),
[人员] varchar(10),
[分数] int
)
SET NOCOUNT ON
Insert into #Score
Select '语文','A', 96 union all
Select '数学','C', 93 union ALL
Select '语文','B', 99 union all
Select '语文','C', 80 union all
Select '数学','A', 88 union all
Select '数学','B', 84
SELECT * FROM (
SELECT
--dense_rank 允许同一分数并列第一
--ROW_NUMBER 同一分数不并列第一
dense_rank() OVER (PARTITION BY s.[课程] ORDER BY s.[分数] DESC) AS rid
,*
FROM #Score AS s
) AS tt
WHERE rid<=2
/*
rid 课程 人员 分数
-------------------- ---------- ---------- -----------
1 数学 C 93
2 数学 A 88
1 语文 B 99
2 语文 A 96
*/
SELECT 课程,人员,分数 FROM (
SELECT *,ROW_NUMBER()OVER(PARTITION BY 课程 ORDER BY 分数 DESC) rn FROM #Score)t
WHERE rn<=2 ORDER BY 课程 DESC