有一张学生成绩表,比如:
学号   考试序列号     成绩    自动增长字段作为记录关键字
1      A001          86         1
2      A001          93         2
3      A001          67         3
1      A002         98          4  
2      A002         92          5
3      A002         97          6
.......学号是每个学生的唯一编号,考试序列号是对每次考试的唯一识别号,成绩就该学生该次考试成绩。
请求一个SQL,生成一张查询表。
查询一张表,这个表要求生成最高考试成绩及其对应的考试序列号和学生学号
比如结果如下:
学号    考试序列号    成绩
1       A002           98
2       A001           93
3       A002           97
这个SQL 怎么生成,环境 Delphi 6 + Access 2000

解决方案 »

  1.   

    select 学号,max(成绩) as 最好成绩 into #a from 成绩表 group by 学号select a.学号,b.考试序列号,a.最好成绩 as  成绩 from #a a,成绩表 b where b.学号=a.学号 and b.成绩=a.最好成绩
    (凡是最高成绩的都列出来) 
    select a.学号,min(b.考试序列号) as 考试序列号,a.最好成绩 as  成绩 from #a a,成绩表 b where b.学号=a.学号 and b.成绩=a.最好成绩 group by a.学号,a.最好成绩
    (多门最高成绩的只列出来序列号最小的)
      

  2.   

    还是刚才那个问题?你说float类型可以试试这样:select ta.学号,t1.考试序列号,ta.a as 成绩 from 
    (select 学号,max(成绩) as a from t1 group by 学号) as ta 
    inner join t1 
    on ta.学号=t1.学号 and (ta.a-t1.成绩<0.0001) and (ta.a-t1.成绩>-0.0001) 
    order by ta.学号
      

  3.   

    --建立测试环境
    Create Table 表(学号 varchar(10),考试序列号 varchar(10),成绩 varchar(10),自动增长字段作为记录关键字 varchar(10))
    --插入数据
    insert into 表
    select '1','A001','86','1' union
    select '2','A001','93','2' union
    select '3','A001','67','3' union
    select '1','A002','98','4' union
    select '2','A002','92','5' union
    select '3','A002','97','6'
    select * from 表
      

  4.   

    --建立测试环境
    Create Table 表(学号 varchar(10),考试序列号 varchar(10),成绩 varchar(10),自动增长字段作为记录关键字 varchar(10))
    --插入数据
    insert into 表
    select '1','A001','86','1' union
    select '2','A001','93','2' union
    select '3','A001','67','3' union
    select '1','A002','98','4' union
    select '2','A002','92','5' union
    select '3','A002','97','6'
    select * from 表
    order by 自动增长字段作为记录关键字
    select distinct 考试序列号,(select max(成绩) 成绩 from 表 where 考试序列号=a.考试序列号) from 表 a
    group by 学号,考试序列号
    drop table 表
      

  5.   

    mastersky 这样的方法是否会有重复?