在表中如何从第3条显示到第5条记录呢 20CSDN]

发布时间:2017-5-29 10:11:39 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"在表中如何从第3条显示到第5条记录呢 20CSDN]",主要涉及到在表中如何从第3条显示到第5条记录呢 20CSDN]方面的内容,对于在表中如何从第3条显示到第5条记录呢 20CSDN]感兴趣的同学可以参考一下。

谢谢大家,欢迎大家一起研究出最好的算法()

select top 3 * from Booksearch where id not in (select top 2 id from Booksearch order by id) order by id

select top 3 * from (select top 5 * from tablename order by id) a order by id desc

2楼的方法不太灵活。

大家的方法,我最近学了动态SQL,可以用变量的方式来编写一下吗??

--方法不太好! DECLARE @BEGINROW INT,@ENDROW INT,@COUNTS INT,@COUNTS1 INT SET @BEGINROW=3 SET @ENDROW=5 SELECT @COUNTS=@ENDROW-@BEGINROW+1 SELECT @[email protected] EXEC('SELECT TOP [email protected]+  ' * FROM T1 WHERE ID NOT IN (SELECT TOP [email protected]+' ID FROM T1)')

支持1楼的写法。非常好的。

liangpei2008(逍遥叹)的方法太棒了! 无语!

在2005中可以考虑使用Row_Number来处理 select * from ( select top 5 custid,row_number() over(order by custid) as rowno from customermail) a where a.rowno>=3 and a.rowno<=5

ID一定不能重复,重复了将不正确

使用2005中的row_number会生成一个序号的,在05中这个方法不受ID重复的约束

2005中采用Row_Number非常方便实现这种功能

Row_Number是性能不是很好的,我用过这种方法进行分页, 测试的记录有几十万条,前几页还好,后面的页就翻不动了。 所以对于这种问题,我还是使用以前流行的号称千万级数据量的 翻页方式: ------------------------------------------------------- CREATE PROCEDURE GetRecordFromPage     @tblName      varchar(255),       -- 表名     @fldName      varchar(255),       -- 字段名     @PageSize     int = 10,           -- 页尺寸     @PageIndex    int = 1,            -- 页码     @IsCount      bit = 0,            -- 返回记录总数, 非 0 值则返回     @OrderType    bit = 0,            -- 设置排序类型, 非 0 值则降序     @strWhere     varchar(1000) = ''  -- 查询条件 (注意: 不要加 where) AS declare @strSQL   varchar(6000)       -- 主语句 declare @strTmp   varchar(100)        -- 临时变量 declare @strOrder varchar(400)        -- 排序类型 if @OrderType != 0 begin     set @strTmp = "<(select min"     set @strOrder = " order by [" + @fldName +"] desc" end else begin     set @strTmp = ">(select max"     set @strOrder = " order by [" + @fldName +"] asc" end set @strSQL = "select top " + str(@PageSize) + " * from ["     + @tblName + "] where [" + @fldName + "]" + @strTmp + "(["     + @fldName + "]) from (select top " + str((@PageIndex-1)[email protected]) + " ["     + @fldName + "] from [" + @tblName + "]" + @strOrder + ") as tblTmp)"     + @strOrder if @strWhere != ''     set @strSQL = "select top " + str(@PageSize) + " * from ["         + @tblName + "] where [" + @fldName + "]" + @strTmp + "(["         + @fldName + "]) from (select top " + str((@PageIndex-1)[email protected]) + " ["         + @fldName + "] 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) + " * from ["         + @tblName + "]" + @strTmp + " " + @strOrder end if @IsCount != 0     set @strSQL = "select count(*) as Total from [" + @tblName + "]" exec (@strSQL) GO -------------------

没有SQL也没有大数据:( 看看这样的思路会不会快一点 =========================================================== 假设说 数据表 要按照字段 Field1 进行排序,需要显示的纪录为第 Line1行 到 第 Line2行。 我的想法是找到一个比 Line1- Line2 范围稍大的区域的资料,再用Top N这样的语句过滤。 1,先找出第一条记录 和最后一条记录的Field1的内容 比方说是A1 和AN, 2,    构造一个个比A1大比AN小的值B(可以用类似求中值的方法构造),用Count (*)找出 它在结果中的位置。    如果比Line1小很多,那就把它作为新的A1,重复步骤2    如果比Line2大很多,就把它作为一个新的A2。重复步骤2    如果比Line1小一点,那就把它作为查询条件,用Yop N 和 Field1>=B这样的过滤条件输出结果    如果比Line2大一点,那就把它作为查询条件,用Yop N 和 Field1<=B这样的过滤条件并结合排序来输出结果   如果在Line1到Line2之间,就将它作为查询条件,用2个SQL语句       1 (Top N和Field1<=B再结合排序方法)       2 (Top N和Field1>B)       Union 出查询结果 ==================================== 不知哪位DX有兴趣测试一下效率?

jxyaolp对row_number的理解有偏差,它本身并不是为了分页而创建的,而在你的“千万级数据份页方法”中,用了两个select top from..这里如果加入row_number改进一下,会更快。

上一篇:在sqlserver2k有什么更好的方法吗,一起看一看!!!!!!!!!!1 20CSDN]
下一篇:(Object-Oriented Database)对象数据库必须有什么样的功能才能吸引你使用。 20Kylix_NOW]

相关文章

相关评论

本站评论功能暂时取消,后续此功能例行通知。

一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!

二、互相尊重,对自己的言论和行为负责。