总的来说,没有看出来你提的问题有什么深层次的限制条件。第一个问题:
按顺序取的方式处理,第101页取前100页每一页上的第1条,第102页取前100页每一页上的第2条,...
第100+n页取前100页每一页上的第n条,...第200页取前100页每一页上的第100条随机取的话,需要将已经取过的设置个标志。第二个问题:m页跳n页的问题,先将小数转换为分数。按分母m循环,取分子n页就跳过剩下的页。

解决方案 »

  1.   


    ==========换个算法======即,比如我每隔150条随机取一条出来(不重复),那么10000条后就是变成15000条了。这个应该比较容易了吧,直接在SQL里面可以实现吗?或者说在C#代码里面实现??求解???
      

  2.   

    10000条数据变成20000条怎么每页采取一条呢,要所有都重复一次
    那最简单了
    select * from tab
    union all
    select * from tab然后你次序打乱重新分页不就可以了吗
    select top 100 *
    from (
    select * from tab
    union all
    select * from tab
    ) as t
    order by newid()
      

  3.   

    /*每100笔资料中随机取一个,且不重复*/
    select (select top 1 id from tb where id between a.id and a.id+99 order by newid() ) from tb a
    where id*100/100-id/100*100 =1    
    -- 除以100的余数为1,好象有个函数的吧,忘了,只好用笨办法。
    /*每N笔资料中随机取一个*/
    select (select top 1 id from tb where id between a.id and a.id+N-1 order by newid() ) from tb a
    where id*N/N-id/N*N =1
      

  4.   


    --SQL 2005create table #ta(id int)
    insert into #ta
    select a.number+100*b.number+1 from
    (select number from master..spt_values where type='P' and number<100) a,
    (select number from master..spt_values where type='P' and number<100) bselect *,row_number() over (partition by NTILE_id order by id) from 
    (select *,NTILE(100) over (order by id) as NTILE_id from #ta) a--数据分成100组,再排名
      

  5.   

    /*每100笔资料中随机取一个,且不重复*/
    select (select top 1 id from tb where id between a.id and a.id+99 order by newid() ) from tb a
    where id*100/100-id/100*100 =1   
    -- 除以100的余数为1,好象有个函数的吧,忘了,只好用笨办法。
    /*每N笔资料中随机取一个*/
    select (select top 1 id from tb where id between a.id and a.id+N-1 order by newid() ) from tb a
    where id*N/N-id/N*N =1
    7楼的这个是有重复的
      

  6.   

    select top 100 * from tb order by newid()
      

  7.   

    --假设表的ID列是自增列,且表中已有10000条记录
    --下面生成的tb用于演示如何按楼主的要求插入重复记录:
    select top 10000 id=identity(int,1,1),left(replace(newid(),'-',''),15) as telnum into tb from sysobjects a,sysobjects b,sysobjects c
    go
    insert into tb(telnum)
    select telnum from tb order by id%100,id
    go
    select * from tb order by id
    --比较一下id=1 和 id=10101 的两条记录你就知道了
    go
    drop table tb
      

  8.   

    如果是个分页的需求,则参考:http://topic.csdn.net/u/20100203/17/8F916471-597D-481A-B170-83BCEFE3B199.html
      

  9.   

    --SQL 2005create table #ta(id int)
    insert into #ta
    select a.number+100*b.number+1 from
    (select number from master..spt_values where type='P' and number<100) a,
    (select number from master..spt_values where type='P' and number<100) bselect *,row_number() over (partition by NTILE_id order by id) from 
    (select *,NTILE(100) over (order by id) as NTILE_id from #ta) a--数据分成100组,再排名
      

  10.   


    --测试,10000的数据#TA
    create table #ta(id int)
    insert into #ta
    select a.number+100*b.number+1 from
    (select number from master..spt_values where type='P' and number<100) a,
    (select number from master..spt_values where type='P' and number<100) b(select *,row_number() over (partition by NTILE_id order by newid()) as num_id into #temp from 
    (select *,NTILE(100) over (order by id) as NTILE_id from #ta) a) b--数据分成100组,再排名
    select top 100 * from 
    (select *,row_number() over (partition by NTILE_id order by newid()) as num_id from 
    (select *,NTILE(100) over (order by id) as NTILE_id from #ta) a) b 
    order by NTILE_id  
     
    select top 100 * from 
    (select *,row_number() over (partition by NTILE_id order by newid()) as num_id from 
    (select *,NTILE(100) over (order by id) as NTILE_id from #ta) a) b
    order by num_id --自己测试,那如果换成每隔100条随机取呢?(不重复)。然后再加在原表后面????随机不重复 
      

  11.   

    楼上的这个,我测试的时候,怎么会报错呢??
    有点复杂,看不大懂消息 156,级别 15,状态 1,第 7 行
    关键字 'select' 附近有语法错误。
    消息 102,级别 15,状态 1,第 8 行
    ')' 附近有语法错误。