随机提取记录问题
表:table(Fid,Fclass,Fnumber,Fname)
假设Fclass的取值有1..9共九个值,现在要从table中随机取出10个记录,
要求:在这10个记录中,每一个Fclass都得不同,这样就可以取到9条记录,
最后还有一条记录从剩余的记录中随机取出???
问题点数:50、回复次数:20Top
1 楼truelang(truelang)回复于 2005-08-01 17:42:47 得分 0
在线等待!谢谢!!!!!!
随机读取N条记录的语句:SELECT TOP N * FROM table ORDER BY NEWID()Top
2 楼zlp321002(Life Is Good,Let's Shine)回复于 2005-08-01 19:21:11 得分 4
--最后还有一条记录从剩余的记录中随机取出???
--那不又有重复记录了??这个怎么处理??Top
3 楼junly1981(浪子心声)回复于 2005-08-01 19:40:15 得分 4
同意 zlp321002(职业-->烧人民币)的,说清楚一点Top
4 楼aw511(点点星灯)回复于 2005-08-01 19:41:57 得分 12
--楼主,你说的是这个意思吗??
CREATE TABLE [chengji] (
[ID] [int] IDENTITY (1, 1) NOT NULL ,
[chengji] [decimal](18, 2) NULL ,
CONSTRAINT [PK_chengji] PRIMARY KEY CLUSTERED
(
[ID]
) ON [PRIMARY]
) ON [PRIMARY]
GO
select id,chengji from dbo.chengji
insert chengji(chengji)
values(100)
insert chengji(chengji)
values(93.3)
insert chengji(chengji)
values(78.5)
insert chengji(chengji)
values(56.2)
insert chengji(chengji)
values(88)
--测试
select top 1 id,chengji into #t from dbo.chengji ORDER BY NEWID()
select id,chengji from dbo.chengji
union all
select id,chengji from #t
drop table #tTop
5 楼truelang(truelang)回复于 2005-08-02 08:35:13 得分 0
10个记录从九种类型Fclass中取,当然有一个要重复啦,,,,,,就是有且仅有一个Fclass类型有两条记录,其它Fclass只能对应一条记录!!!!!!
谢谢 aw511(点点星灯) ,但我希望用我所用的表来解决,如果用你的解决方法,我还得再去研究你的想法,不是吗???Top
6 楼aw511(点点星灯)回复于 2005-08-02 08:40:43 得分 4
楼主,我是从5个不同纪录中提取了6条记录啊,有两条是相同的啊!
我用了临时表,你说的方法是什么呢??Top
7 楼truelang(truelang)回复于 2005-08-02 09:00:50 得分 0
大概就是这个意思,我先去试下,不过最好不要用Union,因为如果类型太多的话,这个方法太死了!!!!!Top
8 楼rfq(任凤泉)回复于 2005-08-02 10:29:04 得分 2
newid()
Top
9 楼truelang(truelang)回复于 2005-08-02 13:18:05 得分 0
继续请教高手!!!
另外请注意:table表中可不止九条记录的啊,每个Fclass都会对应有很多条记录的,
是要多这么多条记录中取出10条记录,并且要符合以上条件!!!Top
10 楼truelang(truelang)回复于 2005-08-03 11:03:32 得分 0
已经一天了,高手哪去啦???Top
11 楼topdogXP(心残)回复于 2005-08-04 11:17:58 得分 7
看看是不是这个意思:
select * from Table T where Fclass in(select Top 1 Fclass from Table where Fclass=T.Fclass Group by Fclass) Or Fid=@@IDENTITYTop
12 楼truelang(truelang)回复于 2005-08-04 12:09:54 得分 0
是这样的,不过我是要能取出10条记录!!!
先取出9条记录也行,每种类型取一个记录出来!Top
13 楼bugchen888(臭虫)回复于 2005-08-04 13:20:43 得分 12
table(Fid,Fclass,Fnumber,Fname)
select distinct Fid,(select top 1 Fclass,Fnumber,Fname where Fid=a.Fid order by newid())
from table a
union
select top 1 * from table order by newid()
这样无法保证最后一条记录和其他记录不相同.如果实在是对这个要求很Care,那我感觉只能用临时表了.Top
14 楼truelang(truelang)回复于 2005-08-04 15:42:45 得分 0
上面的语句运行出错!
其实只要能拿出9条就可以了,因为最后一条是比较容易的。
可以保证最后一条记录不重复,只要加上一个条件:sleect * from table1 where Fid not in......Top
15 楼truelang(truelang)回复于 2005-08-05 14:34:04 得分 0
继续请教宝贵意见,谢谢!!!!!!Top
16 楼bugchen888(臭虫)回复于 2005-08-05 16:10:27 得分 5
sorry 子查询中忘了写FROM子句
select distinct Fid,
(select top 1 Fclass,Fnumber,Fname
from table
where Fid=a.Fid
order by newid())
from table aTop
17 楼truelang(truelang)回复于 2005-08-05 17:40:26 得分 0
谢谢 bugchen888(臭虫)
但为什么我老是运行出错呢,把table改为table1之后还是运行不了,table是一个关键字Top
18 楼truelang(truelang)回复于 2005-08-08 15:33:49 得分 0
继续求助,谢谢!Top
19 楼truelang(truelang)回复于 2005-08-09 14:22:39 得分 0
现在这里怎么这么冷清啊,,
一个问题阁了一个星期了还没得到解决,
结了算啦!!!!!!Top
20 楼bugchen888(臭虫)回复于 2005-08-09 14:30:16 得分 0
select distinct Fid,
(select top 1 Fclass,Fnumber,Fname
from [table]
where Fid=a.Fid
order by newid())
from [table] aTop




