日期:2014-05-17  浏览次数:20376 次

求一分页相关的SQL语句 ??
RT

例如 ,select 某表 ,一共有 800 条数据 。
我要取得上面 800 条数据的 1--100条数据,101--200条数据...... 这样的SQL语句怎么写啊 ???

即 ,“select * from 表 where xxx=yyy ???” 蓝色问号处 要怎么写,返回的就是 符合条件的第1--100条数据 ;再改成怎样 ,返回的就是符合条件的第101--200条数据 ;......

------解决方案--------------------
SQL code

select * from (
select row_number() over(order by col1) rn,* from 你的表) t
where rn between 1 and 100--你的条件

------解决方案--------------------
SQL code
select * from 
(
select row_number() over(order by 排序的列) row_id,* from tb
where..........
) as  t
where row_id between 1 and 100

------解决方案--------------------
探讨

忘了说,要 Access 也能使用的 ...
我在那边也发了帖子 :http://topic.csdn.net/u/20120806/22/19524ad0-b52b-453b-bf2d-e744e02a5fb8.html

------解决方案--------------------
SQL code


select * from 
 (
   select row_number() over(order by 排序的列) rn,* from tb
   where xxx=yyy
  ) as  a
where rn between 1 and 100

------解决方案--------------------
C# code

/// <summary>
        /// 获得查询分页数据
        /// </summary>
        public DataSet GetPageList(int pageSize, int currentPage, string strWhere, string filedOrder)
        {
            StringBuilder strSql = new StringBuilder();
            if (currentPage > 0)
            {
                int topNum = pageSize * currentPage;
                strSql.Append("select top " + pageSize + " Id,Title,Author,Form,Keyword,Zhaiyao,ClassId,ImgUrl,Daodu,Content,Click,IsMsg,IsTop,IsRed,IsHot,IsSlide,IsLock,AddTime from Article");
                strSql.Append(" where Id not in(select top " + topNum + " Id from Article");
                if (strWhere.Trim() != "")
                {
                    strSql.Append(" where " + strWhere);
                }
                strSql.Append(" order by " + filedOrder + ")");
                if (strWhere.Trim() != "")
                {
                    strSql.Append(" and " + strWhere);
                }
                strSql.Append(" order by " + filedOrder);
            }
            else
            {
                strSql.Append("select top " + pageSize + " Id,Title,Author,Form,Keyword,Zhaiyao,ClassId,ImgUrl,Daodu,Content,Click,IsMsg,IsTop,IsRed,IsHot,IsSlide,IsLock,AddTime from Article");
                if (strWhere.Trim() != "")
                {
                    strSql.Append(" where " + strWhere);
                }
                strSql.Append(" order by " + filedOrder);
            }

            return DbHelperOleDb.Query(strSql.ToString());
        }

------解决方案--------------------
SQL code

select * from (
select row_number() over(order by col1) rn,* from 你的表) t
where rn between 1 and 100--你的条件

------解决方案--------------------
SQL code

2.分页SQL语句 
select * from(select (row_number() OVER (ORDER BY tab.ID Desc)) as rownum,tab.* from 表名 As tab) As t where rownum between 起始位置 And 结束位置 

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go

ALTER PROC [dbo].[PROCE_PageView2000]
(
@tbname     nvarchar(100),               --要分页显示的表名
@FieldKey   nvarchar(1000),      --用于定位记录的主键(惟一键)字段,可以是逗号分隔的多个字段
@PageCurrent int=1,               --要显示的页码
@PageSize   int=10,                --每页的大小(记录数)
@FieldShow nvarchar(1000)='',      --以逗号分隔的要显示的字段列表,如果不指定,则显示所有字段
@FieldOrder nvarchar(1000)='',      --以逗号分隔的排序字段列表,可以指定在字段后面指定DESC/ASC
@WhereString    nvarchar(1000)=N'',     --查询条件
@RecordCount int OUTPUT             --总记录数
)
AS
SET NOCOUNT ON
--检查对象是否有效
--IF OBJECT_ID(@tbname) IS NULL
--BE