当前位置:首页 » 编程语言 » sqlserver排序分页
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

sqlserver排序分页

发布时间: 2023-08-10 21:12:33

❶ 几种流行的数据库sql分页

sqlserver分页
第一种分页方法
需用到的参数:
pageSize每页显示多少条数据
pageNumber页数从客户端传来
totalRecouds表中的总记录数selectcount(*)from表名
totalPages总页数
totalPages=totalRecouds%pageSize==0?totalRecouds/pageSize:totalRecouds/pageSize+1
pages计算前pages条数据
pages=pageSize*(pageNumber-1)
SQL语句:
selecttoppageSize*from表名whereidnotin(selecttoppagesidfrom表名orderbyid)orderbyid
第二种分页方法
pageSize每页显示多少条数据
pageNumber页数从客户端传来
pages=pageSize*(pageNumber-1)+1
selecttoppageSize*from表名whereid>=(selectmax(id)from(selecttoppagesidfrom表名orderbyidasc)t)

mysql分页
需用到的参数:
pageSize每页显示多少条数据
pageNumber页数从客户端传来
totalRecouds表中的总记录数selectcount(*)from表名
totalPages总页数
totalPages=totalRecouds%pageSize==0?totalRecouds/pageSize:totalRecouds/pageSize+1
pages起始位置
pages=pageSize*(pageNumber-1)
SQL语句:
select*from表名limitpages,pageSize;
mysql分页依赖于关键字limit它需两个参数:起始位置和pageSize
起始位置=页大小*(页数-1)
起始位置=pageSize*(pageNumber-1)

oracle分页
pageSize每页显示多少条数据
pageNumber页数从客户端传来
totalRecouds表中的总记录数selectcount(*)from表名
totalPages总页数
totalPages=totalRecouds%pageSize==0?totalRecouds/pageSize:totalRecouds/pageSize+1
startPage起始位置
startPage=pageSize*(pageNumber-1)+1
endPage=startPage+pageSize
SQL语句
selecta.*from
(
selectrownumnum,t.*from表名twhere某列=某值orderbyidasc
)a
wherea.num>=startPageanda.num<endPage

db2分页
intstartPage=1//起始页
intendPage;//终止页
intpageSize=5;//页大小
intpageNumber=1//请求页

startPage=(pageNumber-1)*pageSize+1
endPage=(startPage+pageSize);


SQL语句
select*from(select字段1,字段2,字段3,字段4,字段5,rownumber()over(orderby排序字段asc)asrowidfrom表名)asawherea.rowid>=startPageANDa.rowid<endPage

access分页
pageSize每页显示多少条数据
pageNumber页数从客户端传来
pages=pageSize*(pageNumber-1)+1
SQL语句
selecttoppageSize*from表名whereid>=(selectmax(id)from(selecttoppagesidfrom表名orderbyidasc)t)

❷ sql server 求和后如何分页请看SQL语句

四种方式实现SQLServer
分页查询
SQLServer
的数据分页:
假设现在有这样的一张表:
CREATE
TABLE
test
(
id
int
primary
key
not
null
identity,
names
varchar(20)
)
然后向里面插入大约1000条数据,进行分页测试
假设页数是10,现在要拿出第5页的内容,查询语句如下:
--10代表分页的大小
select
top
10
*
from
test
where
id
not
in
(
--40是这么计算出来的:10*(5-1)
select
top
40
id
from
test
order
by
id
)
order
by
id
原理:需要拿出数据库的第5页,就是40-50条记录。首先拿出数据库中的前40条记录的id值,然后再拿出剩余部分的前10条元素
第二种方法:
还是以上面的结果为例,采用另外的一种方法
--数据的意思和上面提及的一样
select
top
10
*
from
test
where
id
>
(
select
isnull(max(id),0)
from
(
select
top
40
id
from
test
order
by
id
)
A
)
order
by
id
原理:先查询前40条记录,然后获得其最id值,如果id值为null的,那么就返回0
然后查询id值大于前40条记录的最大id值的记录。
这个查询有一个条件,就是id必须是int类型的。
第三种方法:
select
top
10
*
from
(
select
row_number()
over(order
by
id)
as
rownumber,*
from
test
)
A
where
rownumber
>
40
原理:先把表中的所有数据都按照一个rowNumber进行排序,然后查询rownuber大于40的前十条记录
这种方法和oracle中的一种分页方式类似,不过只支持2005版本以上的
第四种:
存储过程查询
创建存储过程
alter
procere
pageDemo
@pageSize
int,
@page
int
AS
declare
@temp
int
set
@temp=@pageSize*(@page
-
1)
begin
select
top
(select
@pageSize)
*
from
test
where
id
not
in
(select
top
(select
@temp)
id
from
test)
order
by
id
end
执行存储过程
exec
10,5

❸ sqlserver 2005数据库 怎么进行分页

分两步实现
一、分页的存储过程如下
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go

CREATE PROCEDURE [dbo].[Pagination]
@tblName varchar(255), -- 表名
@strGetFields varchar(1000) , -- 需要返回的列
@fldName varchar(255), -- 排序的字段名
@PageSize int, -- 页尺寸
@PageIndex int , -- 页码
@doCount bit=0, -- 返回记录总数, 非 0 值则返回
@OrderType bit, -- 设置排序类型, 非 0 值则降序
@strWhere varchar(1500) -- 查询条件 (注意: 不要加 where)
AS
declare @strSQL varchar(5000) -- 主语句
declare @strTmp varchar(110) -- 临时变量
declare @strOrder varchar(400) -- 排序类型
if @doCount != 0
begin
if @strWhere !=''
set @strSQL = 'select count(*) as Total from [' + @tblName + '] where ' + @strWhere
else
set @strSQL = 'select count(*) as Total from [' + @tblName + ']'
end
--以上代码的意思是如果@doCount传递过来的不是0,就执行总数统计。以下的所有代码都是@doCount为0的情况
else
begin
if @OrderType != 0
begin
set @strTmp = '<(select min'
set @strOrder = ' order by [' + @fldName + '] desc'
end
--如果@OrderType不是0,就执行降序,这句很重要!
else
begin
set @strTmp = '>(select max'
set @strOrder = ' order by [' + @fldName + '] asc'
end
if @PageIndex = 1
begin
if @strWhere != ''
set @strSQL = 'select top ' + str(@PageSize) + ' ' + @strGetFields + ' from [' + @tblName + '] where '
+ @strWhere + ' ' + @strOrder
else
set @strSQL = 'select top ' + str(@PageSize) + ' ' + @strGetFields
+ ' from [' + @tblName + '] ' + @strOrder
end
--如果是第一页就执行以上代码,这样会加快执行速度
else
begin
--以下代码赋予了@strSQL以真正执行的SQL代码
set @strSQL = 'select top ' + str(@PageSize) + ' ' + @strGetFields + ' from ['
+ @tblName + '] where [' + @fldName + ']' + @strTmp + '(['+ @fldName + ']) from (select top '
+ str( ( @PageIndex - 1 ) * @PageSize ) + ' ['+ @fldName + '] from [' + @tblName + ']'
+ @strOrder + ') as tblTmp)' + @strOrder
if @strWhere != ''
set @strSQL = 'select top ' + str(@PageSize) + ' ' + @strGetFields + ' from ['
+ @tblName + '] where [' + @fldName + ']' + @strTmp + '(['
+ @fldName + ']) from (select top ' + str( ( @PageIndex - 1 ) * @PageSize ) + ' ['
+ @fldName + '] from [' + @tblName + '] where ' + @strWhere + ' '
+ @strOrder + ') as tblTmp) and ' + @strWhere + ' ' + @strOrder
end
end
exec(@strSQL)

二、页面调用部分代码
Function navindex(ByVal PageIndextemp As Integer, ByVal PageSizetemp As Integer, ByVal countint As Integer, ByVal pagename As String) As String
Dim i As Integer
If countint Mod PageSizetemp = 0 Then
i = countint \ PageSizetemp
Else
i = countint \ PageSizetemp + 1
End If
Dim maxi, mini As Integer
Dim navleft, navright, navstrtemp As String
If i < 10 Then
maxi = i
mini = 1
Else
maxi = pageindex + 3
mini = pageindex - 3
If mini > 1 Then
navleft = "<a href=""" & pagename & "?page=" & (mini - 1) & """ class=""link_nav_btn""><</a> "
Else

mini = 1
maxi = 10
End If
If maxi < i Then
navright = " <a href=""" & pagename & "?page=" & (maxi + 1) & """ class=""link_nav_btn"">></a>"
Else
If i - 10 > 0 Then
mini = i - 10
Else
mini = 1
End If
maxi = i
End If
End If
For n As Integer = mini To maxi
If n = pageindex Then
navstrtemp = navstrtemp & " <a href=""" & pagename & "?page=" & n & """ class=""link_nav_btn_select""><b>" & n & "</b></a>"
Else
navstrtemp = navstrtemp & " <a href=""" & pagename & "?page=" & n & """ class=""link_nav_btn"">" & n & "</a>"
End If
Next
navstrtemp = navleft & navstrtemp & navright
Return navstrtemp
End Function

Sub databinds(ByVal tblnametemp As String, ByVal strGetFieldstemp As String, ByVal fldNametemp As String, ByVal PageSizetemp As Integer, ByVal PageIndextemp As Integer, ByVal OrderTypetemp As Short, ByVal strWheretemp As String)
'tblnametemp表名,strGetFieldstemp需要返回的列,fldNametemp排序的字段名,PageSizetemp页尺寸,PageIndextemp页码,OrderTypetemp设置排序类型,strWheretemp查询条件

'总数
cmdTM = New SqlCommand("select count(*) from " & tblnametemp & " where " & strWheretemp, conPubs)
conPubs.Open()
countint = CInt(cmdTM.ExecuteScalar())
conPubs.Close()
'导航
navstr = navindex(PageIndextemp, PageSizetemp, countint, "newshyxh.aspx")
'分页
cmdTM = New SqlCommand("Pagination", conPubs)
cmdTM.CommandType = CommandType.StoredProcere
'add input
cmdTM.Parameters.Add("@tblName", SqlDbType.VarChar, 255).Value = tblnametemp
cmdTM.Parameters.Add("@strGetFields", SqlDbType.VarChar, 1000).Value = strGetFieldstemp
cmdTM.Parameters.Add("@fldName", SqlDbType.VarChar, 255).Value = fldNametemp
cmdTM.Parameters.Add("@PageIndex", SqlDbType.Int).Value = PageIndextemp
cmdTM.Parameters.Add("@PageSize", SqlDbType.Int).Value = PageSizetemp
cmdTM.Parameters.Add("@OrderType", SqlDbType.Bit).Value = OrderTypetemp
cmdTM.Parameters.Add("@strWhere", SqlDbType.VarChar, 1500).Value = strWheretemp

conPubs.Open()
newsright.DataSource = cmdTM.ExecuteReader()
newsright.DataBind()
conPubs.Close()
End Sub

❹ sqlserver分页语句怎么写要不用 top的

还有一种使用方法是用ROW_NUMBER()over(order by) 的函数作为内部查询查出所有的行号,外面通过ROW_NUMBER定义范围查询。
例如有一张Person表,有10000条数据,现在分页查询前1000条。
Top语法:
SELECT TOP 1000 * FROM PERSON;

ROW_NUMBER()OVER(ORDER BY)语法:
order by的作用就是作为排序,后面我们假设使用一个Person表中的id字段
那么sql就是:
SELECT * FROM
(
SELECT *, ROW_NUMBER()OVER(ORDER BY id) AS 'Row' FROM PERSON
)AS T
WHERE t.Row<1001