有这么一个表:
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的第二个值)')