当前位置: 代码迷 >> Sql Server >> 请问一个分页查询SQL语句
  详细解决方案

请问一个分页查询SQL语句

热度:87   发布时间:2016-04-24 10:23:27.0
请教一个分页查询SQL语句
数据表中没有ID之类的东西,只有 姓名   测试时间  测试数据1    测试数据2等。

请问这样的表该怎么实现分页查询,一次检索30条数据,这样的SQL语句该怎么写?谢谢了。
------解决方案--------------------
2005及以上版本可以在查询用如:
select row_number()over(order by xxx)id,其他列
from tb
这种格式先生成一个序列,然后分页的时候再调用,如果2012的话更方便,不过估计你的没那么高版本
------解决方案--------------------
select row_number()over(order by xxx)id,其他列
from tb 
这个已经是例子啊,替换表名、列名自己看效果
------解决方案--------------------
分页查询很多的。直接BAIDU一下吧。
2005以上可以用ROW_NUMBER()OVER来分页。
------解决方案--------------------
这里有个我以前写的:

Use LvRui
Go
if object_ID('[rGiftByCondition]') is not null
Drop Procedure [rGiftByCondition]
Go
/****************************************************************************************************************************************************************
%%存储过程名:rGiftByCondition

%%输入参数:

%%输出参数:

%%功能:根据条件读取记录在表Gift
****************************************************************************************************************************************************************
%%编写:fredrickhu   2013-11-08
exec rGiftByCondition 30,1,3,'飞机',100000,100
****************************************************************************************************************************************************************/
CREATE PROCEDURE rGiftByCondition
(
@PageSize int=30,
@PageCount int=1,
@GiftCatagroyID SMALLINT=NULL,
@CName VARCHAR(50)=NULL , --关键字
@MaxPoint INT=NULL  ,
@MinPoint INT=NULL ,
@RowCount INT=0 OUTPUT
)
AS
DECLARE @PageTotalCount INT

--SELECT @GiftCatagroyID=ISNULL(@GiftCatagroyID,0),@MaxPoint=ISNULL(@MaxPoint,0),@MinPoint=ISNULL(@MinPoint,0),@RowCount=ISNULL(@RowCount,0)

SELECT
 @RowCount=COUNT(1) 
FROM 
    Gift a 
--LEFT JOIN GiftPhoto b ON a.ID=b.GiftID
INNER JOIN GiftCatagroy c ON a.GiftCatagroyID=c.ID
WHERE 
    [Effectiveness]=1
AND 
(a.GiftCatagroyID=@GiftCatagroyID OR @GiftCatagroyID IS NULL)
AND 
(a.CName LIKE '%'+@CName+'%' OR @CName IS NULL)
AND 
(((a.Point>=@MinPoint AND a.Point<=@MaxPoint) OR (@MinPoint IS NULL AND @MaxPoint IS NULL)) OR (a.Point>=@MinPoint AND @MaxPoint IS NULL) OR (a.Point<=@MaxPoint AND @MinPoint IS NULL))

 
SELECT @PageTotalCount=CEILING(@RowCount*1.0/@PageSize),@PageCount=CASE WHEN @PageCount>=@PageTotalCount THEN @PageTotalCount ELSE @PageCount END

;WITH CTE AS
(
SELECT
    a.[ID] ,
a.GiftCatagroyID,
a.GiftNr,
    a.[CName] ,
    a.[Point] ,
    a.[Remark],
    a.DefaultPhotoPath AS PhotoPath,
c.Code AS GiftCatagroyCode,
c.[CName] AS GiftCatagroyName,
ROW_NUMBER()OVER(ORDER BY a.[CreateDate] DESC) AS rows
FROM
    Gift a 
--LEFT JOIN GiftPhoto b ON a.ID=b.GiftID
INNER JOIN GiftCatagroy c ON a.GiftCatagroyID=c.ID
WHERE 
    a.[Effectiveness]=1
AND 
(a.GiftCatagroyID=@GiftCatagroyID OR @GiftCatagroyID IS NULL)
AND 
(a.CName LIKE '%'+@CName+'%' OR @CName IS NULL)
AND 
(((a.Point>=@MinPoint AND a.Point<=@MaxPoint) OR (@MinPoint IS NULL AND @MaxPoint IS NULL)) OR (a.Point>=@MinPoint AND @MaxPoint IS NULL) OR (a.Point<=@MaxPoint AND @MinPoint IS NULL))
)
 
SELECT 
[ID] ,
GiftNr,
    [CName] ,
    [Point] ,
    [Remark],
    PhotoPath,
GiftCatagroyCode,
GiftCatagroyName
FROM 
CTE 
WHERE 
rows BETWEEN (@PageCount-1)*@PageSize+1 AND @PageCount*@PageSize
 
 
 
 

 
Go
  相关解决方案