数据表中没有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