SQL Server 分组后取Top N

将一数据表分组,而后取出每组内按一定规则排列的前N条数据,在工作常用到这样的事情,虽然常见,但写的时候却要花费一定时间

使用函数   ROW_NUMBER()

示例:一个角色菜单表,一个角色对多个菜单,现在要取每个角色的前2条数据,表记录如下

SQL Server 分组后取Top N_第1张图片

SQL 语句

 select * from
 (
SELECT *,ROW_NUMBER() OVER(partition BY RoleId  order by  RoleId) AS rowNum
FROM dbo.DX_RoleMenus
)ranked
 where ranked.rowNum <=2
 order by ranked.RoleId, ranked.rowNum 
查询结果:

SQL Server 分组后取Top N_第2张图片

你可能感兴趣的:(SQL,ROW_NUMBER,分组)