日期:2014-05-19  浏览次数:20545 次

关于group by 多列显示,着急,请教!!!
有这样一个表格:
姓名         成绩         考试时间
王刚         76             2006-10-10
王刚         66             2006-7-13
王刚         81             2006-4-20
王刚         86             2007-1-10
张平         80             2006-9-12
张平         68             2006-5-23
张平         88             2007-2-1
张平         77             2006-12-2

想要找到每个学生的“最好成绩”,同时显示“学生姓名”和“考试时间”。
上面的例子,查询结果应该是:
王刚         86           2007-1-10
张平         88           2007-2-1

最好的成绩容易得出:
select   姓名,   max(成绩)   from   成绩表   group   by   姓名

但是如何同时显示“考试时间”呢??

------解决方案--------------------
Select * from 成绩表 as t where not exists
(Select * from 成绩表 where 姓名=t.姓名 and 成绩> t.成绩)
------解决方案--------------------
select * from T as tmp
where not exists(select 1 from T where 姓名=tmp.姓名 and 成绩> tmp.成绩)
------解决方案--------------------

create table #tab
(
姓名 varchar(10),成绩 int,时间 datetime
)

--select *
--from #tab

insert into #tab (姓名,成绩,时间)
select '王刚 ',76, '2006-10-10 '
union
select '王刚 ',66, '2006-7-13 '
union
select '王刚 ',81, '2006-4-20 '
union
select '王刚 ', 86 , '2007-1-10 '
union
select '张平 ' , 80 , '2006-9-12 '
union
select '张平 ' , 68 , '2006-5-23 '
union
select '张平 ' , 88 , '2007-2-1 '
union
select '张平 ', 77, '2006-12-2 '

--truncate table #tab
select * from #tab as tmp
where not exists(select 1 from #tab where 姓名=tmp.姓名 and 成绩> tmp.成绩)

================
姓名 成绩 时间
---------- ----------- ------------------------------------------------------
王刚 86 2007-01-10 00:00:00.000
张平 88 2007-02-01 00:00:00.000

(所影响的行数为 2 行)