sqlserver数据库row_number分页排序如何使用?
1、打开sqlserver数据库管理工具,点击“新建查询”,打开一个空白的SQL书写窗口。在这里面输入如下SQL语句,创建一个临时表,用于演示row_number的使用
IF OBJECT_ID('tempdb..#tmpRowNumber') IS NOT NULL DROP TABLE #tmpRowNumber;
CREATE TABLE #tmpRowNumber(
Col1 VARCHAR(50),
Col2 VARCHAR(50),
Col3 INT
)

2、往临时表中插入几条演示数据
INSERT INTO #tmpRowNumber(Col1, Col2, Col3) VALUES('张三', '数学', 90);
INSERT INTO #tmpRowNumber(Col1, Col2, Col3) VALUES('张三', '语文', 80);
INSERT INTO #tmpRowNumber(Col1, Col2, Col3) VALUES('李四', '数学', 75);
INSERT INTO #tmpRowNumber(Col1, Col2, Col3) VALUES('李四', '语文', 85);

3、查询表中的数据
SELECT * FROM #tmpRowNumber

4、row_number的首次使用,仅使用order by,将查询结果排序,并给结果每一行添加一个序号
SELECT ROW_NUMBER() OVER(ORDER BY col3) AS RowId, *
FROM #tmpRowNumber

5、有了这个行序号之后,就可以做分页查询了。比如,查询大于第2行小于第4行的数据
SELECT *
FROM (
SELECT ROW_NUMBER() OVER(ORDER BY col3) AS RowId, *
FROM #tmpRowNumber
) tmp
WHERE tmp.RowId > 2 and tmp.RowId <4

6、row_number的另外一个用法就是结合分组的语法。比如:按照Col1姓名分组,再按照Col3分数从高到低排序
SELECT ROW_NUMBER() OVER(PARTITION BY Col1 ORDER BY col3 DESC) AS RowId, *
FROM #tmpRowNumber

7、row_number按照Col2课程分组,Col3分数从高到低排序
SELECT ROW_NUMBER() OVER(PARTITION BY Col2 ORDER BY col3 DESC) AS RowId, *
FROM #tmpRowNumber
