首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

请问关于单个表查询, 对于某条件重复的数据,只提取随机一条的有关问题.(简单的SQL查询语句)

2012-03-08 
请教关于单个表查询, 对于某条件重复的数据,只提取随机一条的问题.(简单的SQL查询语句)有这么一个表:tblSt

请教关于单个表查询, 对于某条件重复的数据,只提取随机一条的问题.(简单的SQL查询语句)
有这么一个表: 
tblStud(fId, fName, fAge, fClass) 说明:fId是主键,唯一编号,fName有可能重复,fAge, fClass只是表的一些其它信息.
由于fName 可能重复, 因此,我想得到这样一个表,四个字段都有,但姓名不重复, 对于姓名重复的记录,只取任意一条就可以了. 示例数据如下:
fId fName fAge fClass
1李军21大二
2张红21大三
3张三20大一
4李军22大三
5王五20大三
6张红22大三

需要得到的数据如下:

fId fName fAge fClass
1李军21大二
2张红21大三
3张三20大一
5王五20大三

"4"和"6"已经重复,因此不要.

自己的想法是:应该对fName 进行分组查询,可是用分组语句,只能得到"fName"这一列,其它的三个值没法得到,
试着用"top 1"也不行. 
后来想着用: select * from tblStud where fId in( select fId from tblStud group by fName ) 呵呵,这条语句明显有问题,却不知道怎样解决.. 
想着用distinct 仍然不行..不知各位是怎样解决的? 最好能说说你们都是怎样分析的..




[解决办法]
use aggregate function,

select * from tblSud Where fId in (select min(fId) from tblStud group by fName)
[解决办法]

SQL code
--任意选一条select * from tblStud a where fId=(select top 1 fId from tblStud where fName=a.fName order by newid())--取最大或最小select * from tblStud a where fId=(select min/*max*/(fId) from tblStud where fName=a.fName)
[解决办法]
select fID, fName, fAge, fClass
from tblStud
where fID = (select top 1 fID
from tblStud
where fName = A.fName)
[解决办法]
SQL code
--按某一字段分组取最大(小)值所在行的数据--2007-10-23于杭州/*数据如下:name val memoa    2   a2(a的第二个值)a    1   a1--a的第一个值a    3   a3:a的第三个值b    1   b1--b的第一个值b    3   b3:b的第三个值b    2   b2b2b2b2b    4   b4b4b    5   b5b5b5b5b5*/--创建表并插入数据:create table tb(name varchar(10),val int,memo varchar(20))insert into tb values('a',    2,   'a2(a的第二个值)') 

热点排行