必须掌握的Row_Number
接下来我们将给大家介绍如何分页显示后台数据,但是在这之前我需要先给大家介绍一下SQL Server的Row_Number函数。
Row_Number函数让我们分页显示后台变得非常方便。
一般用户对于Row_Number函数的使用会比较迷糊,不过通过本节的学习,你会发现Row_Number其实很简单。
一个例子
假定我们需要按照日期降序加载订单表数据,每页10行,加载第8页,我们可以在Foxtable的SQL窗口测试以下各步骤的Select语句。
1、按照常规写出最简单的Select语句:
Select * From {订单}
这是显示的结果是:
2、RowNumber函数用于按指定的列排序,来生成一个序号列,语法为:
Row_Number() Over(Order by 排序列) As 序号列
可变的只有排序列和序号列名,默认是升序,如果需要降序,在排序列后面加上DESC参数即可。
现在将我们的Select语句改写为:
Select Row_Number() Over(Order by 日期 Desc) As 序号, * From {订单}
显示的结果如下图,可以看到增加了一个序号列,序号是根据日期按照降序编排的。
3、现在我们可以将上面的Select语句当作一个表来看待,我们从这个表提取数据:
Select * From (Select Row_Number() Over(Order by 日期 Desc) As 序号, * From {订单}) As tmp
上述语句分三部分,中间括起来的蓝色部分可以理解为一个临时表,我们需要给这个临时表取个名字,后面这段红色部分将这个临时表取名为"tmp"
现在的显示结果没有变化:
4、现在是最后一步,每页10行,第8页的数据的序号列范围为70到80,我们将Select语句改为:
Select * From (Select Row_Number() Over(Order by 日期 Desc) As 序号, * From {订单}) As tmp Where 序号 >=71 And 序号 <= 80
显示结果为:
上图就是按照日期降序加载订单表,每页10行,加载第8页的结果。
最终的Select语句看起来有点复杂:
Select * From (Select Row_Number()
Over(Order by 日期 Desc) As 序号, * From {订单}) As tmp
Where 序号 >=71 And 序号 <= 80
但是你可以理解为:
Select * From tmp
Where 序号 >=71 And 序号 <= 80
而tmp是个临时表,是通过以下语句生成的:
(Select Row_Number() Over(Order by 日期 Desc) As 序号, * From
{订单}) As tmp
注意临时表的Select语句必须用圆括号括起来。