SELECT * FROM (  SELECT row_.*, rownum rownum_ from (
  SELECT S.ID,S.CONTRACT,S.ERATE,S.INFORMATIONFEE,S.PLACE,S.MEMO,S.INPUTDATE 
  FROM NEW5I5JDBA.CONSUME S WHERE 1=1 
  AND S.COMPANYSID = 1 and S.contract like '%M%'
  order by S.ID ASC ) row_
WHERE rownum<=23+15 ) WHERE  rownum_ >=16
我想显示每页23条 ,16代表16页!
可是我看到我分出来的数据时一条一条蹦出来的!比如,15页分出来23条,16页分出来的只有一条是新的,剩下的22条都是旧的!我就不知道我那写错了,为什么不是23条一个新页呢?

解决方案 »

  1.   

    23+15为什么是23+15 呢?我这个地方没看明白   比如第 n页   
    rownum> n*23 
    rownum(n+1)*23 ....
    要类似这样的代码吧
      

  2.   

    网上找个分页SQL 照着改一下 看看人家怎么写的
    23+15 我也没看懂···
      

  3.   

    SELECT * FROM ( SELECT row_.*, rownum rownum_ from (
      SELECT S.ID,S.CONTRACT,S.ERATE,S.INFORMATIONFEE,S.PLACE,S.MEMO,S.INPUTDATE  
      FROM NEW5I5JDBA.CONSUME S WHERE 1=1  
      AND S.COMPANYSID = 1 and S.contract like '%M%'
      order by S.ID ASC ) row_
    WHERE rownum<=23*16 ) WHERE rownum_ >=15*23
      

  4.   

    SELECT * FROM ( SELECT row_.*, rownum rownum_ from (
      SELECT S.ID,S.CONTRACT,S.ERATE,S.INFORMATIONFEE,S.PLACE,S.MEMO,S.INPUTDATE  
      FROM NEW5I5JDBA.CONSUME S WHERE 1=1  
      AND S.COMPANYSID = 1 and S.contract like '%M%'
      order by S.ID ASC ) row_
    WHERE rownum<=23+15 ) WHERE rownum_ >=16 
    select * from table where rownum_=16 limit (currentPage - 1) * pageSize,pageSize
    rownum_为查询条件 currentPage为当前页    pageSize为每页显示条数
      

  5.   

    我写一个你可以看看
    SELECT TOP 23 *  FROM TestTable  WHERE (ID NOT IN            (SELECT TOP 23 id           FROM TestTable   ORDER BY id))  ORDER BY ID   SELECT TOP 页大小 *  FROM TestTable  WHERE (ID NOT IN            (SELECT TOP 页大小*页数 id  FROM 表  ORDER BY id))  ORDER BY ID
      

  6.   

    lz的明显是oracle的 mysql和sqlserver的不使用.........
      

  7.   

    在你的基础上进行了小小的修改,即:将你的中间那一层的rownum 放到了最内层,具体如下:
    SELECT * FROM ( 
      SELECT *
      from (
           SELECT S.ID,S.CONTRACT,S.ERATE,S.INFORMATIONFEE,S.PLACE,S.MEMO,S.INPUTDATE,rownum rownum_  
           FROM NEW5I5JDBA.CONSUME S 
           WHERE 1=1 AND S.COMPANYSID = 1 and S.contract like '%M%'
           order by S.ID ASC 
      ) row_
      WHERE rownum_<=23+15 
    ) WHERE rownum_ >=16
    另外,描红部分会降低查询效率的。当数据量大时会有所凸显。
      

  8.   

    网上找个分页SQL 照着改一下 看看人家怎么写的
    23+15 我也没看懂···
      

  9.   

    哎。。你怎么给这个呢??你直接把你在后台写的SQL语句打出来给我们看啊。。不要把从控制台生成的SQL语句给我们看啊。。这样很费力的啊!!应该是你自己写的SQL语句出来问题后者是参数的问题??自己再看看吧!!(建议)
      

  10.   

    select rnum, y.* from 
      ( select x.*, rownum rnum from 
        (
        
        
        SELECT S.ID,S.CONTRACT,S.ERATE,S.INFORMATIONFEE,S.PLACE,S.MEMO,S.INPUTDATE  
      FROM NEW5I5JDBA.CONSUME S WHERE 1=1  
      AND S.COMPANYSID = 1 and S.contract like '%M%'
      order by S.ID ASC 
        
        
        ) x where rownum <= 23*16
    ) y where rnum > 23*15 ;