SELECT * FROM (
SELECT ROW_NUMBER() OVER(ORDER BY ProductID ASC) RowNum, * FROM Production.Product ) OrderData
WHERE RowNum BETWEEN @iRowCount*(@iPageNo-1)+1 and @iRowCount*@iPageNo
ORDER BY ProductID ASC其中
SELECT ROW_NUMBER() OVER(ORDER BY ProductID ASC) RowNum, * FROM Production.Product
是什么意思?
Production.Product是一个表还是表中的字段?
RowNum是默认的吗?还是别名?
WHERE RowNum BETWEEN中的RowNum不要改为OrderData.RowNum吗?
SELECT ROW_NUMBER() OVER(ORDER BY ProductID ASC) RowNum, * FROM Production.Product ) OrderData
WHERE RowNum BETWEEN @iRowCount*(@iPageNo-1)+1 and @iRowCount*@iPageNo
ORDER BY ProductID ASC其中
SELECT ROW_NUMBER() OVER(ORDER BY ProductID ASC) RowNum, * FROM Production.Product
是什么意思?
Production.Product是一个表还是表中的字段?
RowNum是默认的吗?还是别名?
WHERE RowNum BETWEEN中的RowNum不要改为OrderData.RowNum吗?
解决方案 »
- 请问怎么只显示日期字段值的年月?
- 请教一个数据库附加问题,待解决
- sql2008 r2不支持exits函数吗
- 安装SQL2005时候报0x74bb1a02指令引用的0x74bb1a02内存。该内存不能为written
- 请教关于reporting service的问题,在MSDN上面的答复都是英文的,看不太懂
- 比较SQL效率
- SQL排序分组
- 为什么会在使用中显示 " sql server timeout expired " , 请大哥们帮帮忙
- 怎样用存储过程和代码给sql server 2000增加一个用户,并设置他对某某数据库的权限
- Mysql触发器新手求助。。。
- 有1000条记录,某个字段从1到1000,里面缺几条,怎么把这几条找出来?
- Select 运算 好象有什么要注意的呀? 总是得不到正确的结果
返回结果集分区内行的序列号,每个分区的第一行从 1 开始。 Transact-SQL 语法约定语法
ROW_NUMBER ( ) OVER ( [ <partition_by_clause> ] <order_by_clause> )
备注
ORDER BY 子句可确定在特定分区中为行分配唯一 ROW_NUMBER 的顺序。参数
<partition_by_clause> 将 FROM 子句生成的结果集划入应用了 ROW_NUMBER 函数的分区。 <order_by_clause>确定将 ROW_NUMBER 值分配给分区中的行的顺序。有关详细信息,请参阅 ORDER BY 子句 (Transact-SQL)。有关详细信息,请参阅 OVER 子句 (Transact-SQL)。返回类型
bigint
Ranking Window Functions
< OVER_CLAUSE > :: =
OVER ( [ PARTITION BY value_expression , ... [ n ] ]
<ORDER BY_Clause> )Aggregate Window Functions
< OVER_CLAUSE > :: =
OVER ( [ PARTITION BY value_expression , ... [ n ] ] ) 备注
可以在单个查询中将多个排名或聚合窗口函数与单个 FROM 子句一起使用。但是,每个函数的 OVER 子句在分区和排序上可能不同。参数
PARTITION BY 将结果集分为多个分区。窗口函数分别应用于每个分区,并为每个分区重新启动计算。value_expression 指定对相应 FROM 子句生成的行集进行分区所依的列。<value_expression> 只能引用 FROM 子句可用的列。不能引用选择列表中的表达式或别名。<ORDER BY 子句> 指定应用排名窗口函数的顺序。有关详细信息,请参阅 ORDER BY 子句 (Transact-SQL)。
ROW_NUMBER()是获得记录号的写法,OVER(...)指定分组和排序,RowNum是别名
Production.Product是一个表,其中Production是架构名
WHERE RowNum BETWEEN中的RowNum可以改为OrderData.RowNum,也可以不改忙因为查询的这一层只有一个子查询,不指定别名也不会有影响
可以这样吗
SELECT * FROM Production.Product
WHERE ROW_NUMBER() BETWEEN @iRowCount*(@iPageNo-1)+1 and @iRowCount*@iPageNo
ORDER BY ProductID ASC