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、往临时表中插入几条演示数据 INS苇质缵爨ERT 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