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