當前位置:首頁 » 編程語言 » sql寫分頁加條件判斷
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

sql寫分頁加條件判斷

發布時間: 2022-06-26 04:01:01

1. sql條件分頁問題

select*from(select*,row_number()over(orderbyid)asNumfromtabwhere.............)twheret.Num>10andt.Num<=20

2. 滿足SQL條件的分頁代碼

<%
name1=request.QueryString("name")
set rs=server.CreateObject("adodb.recordset")
sqla="select * from new where n_iji='"&name1&"' order by n_id desc"
rs.open sqla,conn,1,3

if rs.eof and rs.bof then
response.Write("no record")
else

'----------------分頁部分參數------------------
rs.pagesize=20 '每頁記錄條數
curpage=Request.QueryString("curpage") '將URL參數curpage傳給curpage變數
if curpage="" then curpage="1" end if '初始化頁數
rs.absolutepage=curpage '將本頁設為curpage設置的頁數

for i= 1 to rs.pagesize
if rs.eof then
exit for
end if
%>
內容
<%
rs.movenext
next
end if
%>

----------------翻頁部分-----------------
<%if curpage=1 then%>
<a title="Top"><font face="webdings" color="#000000" >9</font></a>
<%else%>
<a href="?curpage=1&name=<%=name1%>" title="Top"><font face="webdings" color="#000000" >9</font></a>
<%end if%>
<%if curpage=1 then%>
<a title="Previous")><font face="webdings" color="#000000" >3</font></a>
<%else%>
<a href="?curpage=<%=curpage-1%>&name=<%=name1%>" title="Previous"><font face="webdings" color="#000000">3</font></a>
<%end if%>
<%=curpage%> ⁄ <%=rs.pagecount%>
<%if rs.pagecount<curpage+1 then%>
<a title="Next"><font face="webdings" color="#000000" >4</font></a>
<%else%>
<a href="?curpage=<%=curpage+1%>&name=<%=name1%>" title="Next"><font face="webdings" color="#000000" >4</font></a>
<%end if%>
<%if rs.pagecount<curpage+1 then%>
<a title="Bottom"><font face="webdings" color="#000000" >:</font></a>
<%else%>
<a href="?curpage=<%=rs.pagecount%>&name=<%=name1%>" title="Bottom"><font face="webdings" color="#000000" >:</font></a>
<%end if%>

3. sql存儲過程定義多條件查詢加分頁

給你一個強大至極的分頁存儲過程(輸入對應的參加即可),以此共勉,希望你也能進步:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE [dbo].[Pagination]
@Page int = 1, -- 當前頁碼
@PageSize int = 10, -- 每頁記錄條數(頁面大小)
@Table nvarchar(500), -- 表名或視圖名,甚至可以是嵌套SQL:(Select * From Tab Where ID>1000) Tab
@Field nvarchar(800) = '*', -- 返回記錄集欄位名,","隔開,默認是"*"
@OrderBy nvarchar(100) = 'ID ASC', -- 排序規則
@Filter nvarchar(500), -- 過濾條件
@MaxPage smallint output, -- 執行結果 -1 error, 0 false, maxpage true
@TotalRow int output, -- 記錄總數 /* 2007-07-12 22:11:00 update */
@Descript varchar(100) output -- 結果描述
AS
BEGIN

-- =============================================
-- Author: Jimmy.Yu
-- Create date: 2007-5-11
-- Description: SQL 2005 以上版本 通用分頁存儲過程
-- =============================================

Set ROWCOUNT @PageSize;

Set @Descript = 'successful';
-------------------參數檢測----------------
IF LEN(RTRIM(LTRIM(@Table))) !> 0
Begin
Set @MaxPage = 0;
Set @Descript = 'table name is empty';
Return;
End

IF LEN(RTRIM(LTRIM(@OrderBy))) !> 0
Begin
Set @MaxPage = 0;
Set @Descript = 'order is empty';
Return;
End

IF ISNULL(@PageSize,0) <= 0
Begin
Set @MaxPage = 0;
Set @Descript = 'page size error';
Return;
End

IF ISNULL(@Page,0) <= 0
Begin
Set @MaxPage = 0;
Set @Descript = 'page error';
Return;
End
-------------------檢測結束----------------

Begin Try
-- 整合SQL
Declare @SQL nvarchar(4000), @Portion nvarchar(4000);

Set @Portion = ' ROW_NUMBER() OVER (ORDER BY ' + @OrderBy + ') AS ROWNUM FROM ' + @Table;

Set @Portion = @Portion + (CASE WHEN LEN(@Filter) >= 1 THEN (' Where ' + @Filter + ') AS tab') ELSE (') AS tab') END);

Set @SQL = 'Select TOP(' + CAST(@PageSize AS nvarchar(8)) + ') ' + @Field + ' FROM (Select ' + @Field + ',' + @Portion;

Set @SQL = @SQL + ' Where tab.ROWNUM > ' + CAST((@Page-1)*@PageSize AS nvarchar(8));

-- 執行SQL, 取當前頁記錄集
Execute(@SQL);
--------------------------------------------------------------------

-- 整合SQL
Set @SQL = 'Set @Rows = (Select MAX(ROWNUM) FROM (Select' + @Portion + ')';

-- 執行SQL, 取最大頁碼
Execute sp_executesql @SQL, N'@Rows int output', @TotalRow output;
Set @MaxPage = (CASE WHEN (@TotalRow % @PageSize)<>0 THEN (@TotalRow / @PageSize + 1) ELSE (@TotalRow / @PageSize) END);
End Try
Begin Catch
-- 捕捉錯誤
Set @MaxPage = -1;
Set @Descript = 'error line: ' + CAST(ERROR_LINE() AS varchar(8)) + ', error number: ' + CAST(ERROR_NUMBER() AS varchar(8)) + ', error message: ' + ERROR_MESSAGE();
Return;
End Catch;

-- 執行成功
Return;
END

4. mysql資料庫帶條件和分頁一起怎麼寫

你列印一下這個sql語句,放在mysql管理工具中運行一下,看看有沒有sql錯誤

5. 在分頁查詢的SQL里想加一句對外鍵的判斷,可是不太會寫SQL語句,各位大神幫幫忙

&&userId=? 沒看懂這個是什麼意思可以去掉 或者改成 and userid=值,,,,有點明白了 &&改成and ?改成你想要的值

6. SQL如何實現數據分頁,要具體語句,謝謝

可以的,用存儲過程

分頁存儲過程如下

CREATE PROCEDURE GetRecordFromPage
@tblName varchar(255), -- 表名
@RetColumns varchar(1000) = '*', -- 需要返回的列,默認為全部
@Orderfld varchar(255), -- 排序欄位名
@PageSize int = 10, -- 頁尺寸
@PageIndex int = 1, -- 頁碼
@IsCount bit = 0, -- 返回記錄總數, 非 0 值則返回
@OrderType varchar(50) = 'asc', -- 設置排序類型, 非 asc 值則降序
@strWhere varchar(1000) = '' -- 查詢條件 (注意: 不要加 where)
AS

declare @strSQL varchar(1000) -- 主語句
declare @strTmp varchar(300) -- 臨時變數
declare @strOrder varchar(400) -- 排序類型

if @IsCount != 0 --執行總數統計

begin
if @strWhere != ''
set @strSQL = "select count(*) as Total from [" + @tblName + "] where " + @strWhere
else
set @strSQL = "select count(*) as Total from [" + @tblName + "]"
end

else --執行查詢操作

begin

if @OrderType != 'asc'
begin
set @strTmp = "<(select min"
set @strOrder = " order by [" + @Orderfld +"] desc"
end
else
begin
set @strTmp = ">(select max"
set @strOrder = " order by [" + @Orderfld +"] asc"
end

set @strSQL = "select top " + str(@PageSize) + " " + @RetColumns + " from ["
+ @tblName + "] where [" + @Orderfld + "]" + @strTmp + "(["
+ @Orderfld + "]) from (select top " + str((@PageIndex-1)*@PageSize) + " ["
+ @Orderfld + "] from [" + @tblName + "]" + @strOrder + ") as tblTmp)"
+ @strOrder

if @strWhere != ''
set @strSQL = "select top " + str(@PageSize) + " " + @RetColumns + " from ["
+ @tblName + "] where [" + @Orderfld + "]" + @strTmp + "(["
+ @Orderfld + "]) from (select top " + str((@PageIndex-1)*@PageSize) + " ["
+ @Orderfld + "] from [" + @tblName + "] where (" + @strWhere + ") "
+ @strOrder + ") as tblTmp) and (" + @strWhere + ") " + @strOrder

if @PageIndex = 1
begin
set @strTmp = ""
if @strWhere != ''
set @strTmp = " where (" + @strWhere + ")"

set @strSQL = "select top " + str(@PageSize) + " " + @RetColumns + " from ["
+ @tblName + "]" + @strTmp + " " + @strOrder
end
end

exec (@strSQL)

7. sql server 2000 實現帶條件的分頁查詢sql怎麼寫

select top sum * from 表名 where
id not in (select top sum *(num -1) id from 表名 where 欄位名 > 「變數」 and .... order by ** desc)
and 欄位名 > 「變數」 and .... order by ** desc

子查詢和父查詢都用同樣的where條件和order。

8. 怎麼使用sql server 按條件查詢的結果分頁顯示求大神給代碼

盡量不要使用嵌套子查詢,優先使用連接子查詢;
In 關鍵字盡量少使用,效率低,除非 in 包含的信息量非常少,並且叫固定;
如果查詢條件和查詢結果表無直接關聯,優先根據查詢條件查詢出符合條件的臨時結果值,然後和最終結果表關聯;
除 top n 方式分頁之外,使用 row_number() over 方式分頁也可以;
能明確指定結果欄位的,盡量不要用 * ;
不相關的欄位可以省略;
如果最終結果表數據比較大,考慮分表,分區,分庫;
查詢結果表欄位盡量不要包含大文本之類的欄位;
where 條件中對於varchar 欄位 的 like 查詢要適度,不要用太多,會影響效率;

9. sql分頁的幾種寫法

幾種典型的分頁sql,下面例子是每頁50條,198*50=9900,取第199頁數據。
--寫法1,not in/top
select top 50 * from pagetest
where id not in (select top 9900 id from pagetest order by id)
order by id

--寫法2,not exists
select top 50 * from pagetest
where not exists
(select 1 from (select top 9900 id from pagetest order by id)a where a.id=pagetest.id)
order by id

--寫法3,max/top
select top 50 * from pagetest
where id>(select max(id) from (select top 9900 id from pagetest order by id)a)
order by id

--寫法4,row_number()
select top 50 * from
(select row_number()over(order by id)rownumber,* from pagetest)a
where rownumber>9900

select * from
(select row_number()over(order by id)rownumber,* from pagetest)a
where rownumber>9900 and rownumber<9951

select * from
(select row_number()over(order by id)rownumber,* from pagetest)a
where rownumber between 9901 and 9950

--寫法5,在csdn上一帖子看到的,row_number() 變體,不基於已有欄位產生記錄序號,先按條件篩選以及排好序,再在結果集上給一常量列用於產生記錄序號
select * from (
select row_number()over(order by tempColumn)rownumber,*
from (select top 9950 tempColumn=0,* from pagetest where 1=1 order by id)a
)b
where rownumber>9900

10. sql 分頁多條件查詢

查詢可以用if else 去做。
例如:
sql="select * from ........."
``````````````
xh=request("型號")
······
if xh<>"" then sql=sql+" and 型號='"&xh&"'"

分頁可以用
<%TurnPage(rs,20,"型號="&xh&"&其他6個參數·······")%>

<%
Sub TurnPage(ByRef Rs_tmp,PageSize,canshu) 'Rs_tmp 記錄集 PageSize 每頁顯示的記錄條數;
Dim TotalPage '總頁數
Dim PageNo '當前顯示的是第幾頁
Dim RecordCount '總記錄條數
Rs_tmp.PageSize = PageSize
RecordCount = Rs_tmp.RecordCount
TotalPage = INT(RecordCount / PageSize * -1)*-1
PageNo = Request.QueryString ("PageNo")
'直接輸入頁數跳轉;
If Request.Form("PageNo")<>"" Then PageNo = Request.Form("PageNo")
'如果沒有選擇第幾頁,則默認顯示第一頁;
If PageNo = "" then PageNo = 1
If RecordCount <> 0 then
Rs_tmp.AbsolutePage = PageNo
End If
'獲取當前文件名,使得每次翻頁都在當前頁面進行;
Dim fileName,postion
fileName = Request.ServerVariables("script_name")
postion = InstrRev(fileName,"/")+1
'取得當前的文件名稱,使翻頁的鏈接指向當前文件;
fileName = Mid(fileName,postion)
response.write "<table border=0 width='100%'><tr> "
If RecordCount = 0 or TotalPage = 1 Then
Response.Write ""
Else
response.write "<td align=left style='font-size:12px'> 總頁數:<font color=#ff3333>"&TotalPage&"</font>頁"
response.write "當前第<font color=#ff3333>"&PageNo&"</font>頁 </td> "
response.write "<td align='right' style='font-size:12px'> "
end if
If RecordCount = 0 or TotalPage = 1 Then
Response.Write ""
Else
response.write "<a href='"&fileName&"?PageNo=1&"&canshu&"'>首頁|</a>"
If PageNo - 1 = 0 Then
Response.Write "前頁|"
Else
response.write "<a href='"&fileName&"?PageNo="&PageNo-1&"&"&canshu&"'>前頁|</a>"
End If
If PageNo+1 > TotalPage Then
Response.Write "後頁|"
Else
response.write "<a href='"&fileName&"?PageNo="&PageNo+1&"&"&canshu&"'>後頁|</a>"
End If
response.write "<a href='"&fileName&"?PageNo="&TotalPage&"&"&canshu&"'>末頁</a>"
End If
response.write "</td></td></tr></table> "
end sub%>