总的来说,没有看出来你提的问题有什么深层次的限制条件。第一个问题:
按顺序取的方式处理,第101页取前100页每一页上的第1条,第102页取前100页每一页上的第2条,...
第100+n页取前100页每一页上的第n条,...第200页取前100页每一页上的第100条随机取的话,需要将已经取过的设置个标志。第二个问题:m页跳n页的问题,先将小数转换为分数。按分母m循环,取分子n页就跳过剩下的页。
按顺序取的方式处理,第101页取前100页每一页上的第1条,第102页取前100页每一页上的第2条,...
第100+n页取前100页每一页上的第n条,...第200页取前100页每一页上的第100条随机取的话,需要将已经取过的设置个标志。第二个问题:m页跳n页的问题,先将小数转换为分数。按分母m循环,取分子n页就跳过剩下的页。
==========换个算法======即,比如我每隔150条随机取一条出来(不重复),那么10000条后就是变成15000条了。这个应该比较容易了吧,直接在SQL里面可以实现吗?或者说在C#代码里面实现??求解???
那最简单了
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()
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
--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组,再排名
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楼的这个是有重复的
--下面生成的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
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组,再排名
--测试,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条随机取呢?(不重复)。然后再加在原表后面????随机不重复
有点复杂,看不大懂消息 156,级别 15,状态 1,第 7 行
关键字 'select' 附近有语法错误。
消息 102,级别 15,状态 1,第 8 行
')' 附近有语法错误。