求一条sql语句!
不知简单还是难!
如果要查询数据库前5条数据为:
select top 5 * from tablename;
但我想查数据库里第6-10条数据要怎样写?
有没有好方法?
前提数据库有可能是已被删除过数据的!不能用自动编号的ID查询!
------解决方案--------------------如果没有唯一的ID,那就是个难的问题了.
不过可以通过游标来读取指定位置范围的数据.
------解决方案--------------------mark
------解决方案--------------------例如如下的就可以:
DECLARE @_i INT
EXEC SP_CURSOROPEN @_i OUTPUT, @SQL, @scrollopt=1, @ccopt=1, @rowcount= @totalSize OUTPUT
EXEC SP_CURSORFETCH @_i, 16, @Index, @Size
EXEC SP_CURSORCLOSE @_i
------解决方案--------------------SELECT TOP 5 *
FROM (SELECT TOP 5 * FROM tablename)
ORDER BY ID DESC
------解决方案--------------------SELECT TOP 5 *
FROM (SELECT TOP 10 * FROM tablename)
ORDER BY ID DESC
------解决方案--------------------上面的方法都行,关键是你要变通的事情
------解决方案--------------------这不就是分页吗?
你到底想实现什么功能??
------解决方案--------------------SELECT TOP 5 *
FROM (SELECT TOP 10 * FROM tablename)
ORDER BY ID DESC
------解决方案--------------------数据分页的简单Sql语句
1、首先计算出总数据条数n,
2、再根据每页条数k,计算出共多少页m。
3、设计排序模式如:Order by ID ASC
4、第I页,I <m 查询语句:select top k * From (select top k * From (select top (k*I) * from tabe order by ID asc) order by ID desc) order by ID asc
5、最后一页
select top k * From (select top (n-(m-1)*k) * From table order by ID desc) order by ID asc
说明:最外层的select是正确排序
详细说明请见:http://www.gisshop.cn/blog/blog.aspx?ID=4
------解决方案--------------------select count(*) from table
------解决方案--------------------SELECT TOP 5 *
FROM (SELECT TOP 10 * FROM tablename)
ORDER BY ID DESC
------解决方案--------------------SELECT TOP 5 *
FROM (SELECT TOP 10 * FROM tablename)
ORDER BY ID DESC
------解决方案--------------------如果数据库用mysql的话,可以写 SELECT * FROM tablename limit 5,10;