数据比对在办公应用中非常普遍,常见的是人工比对,不仅费时费力,还无法避免会出现差错。
今日,教务处传过来两张Excel表格,一张是补考成绩汇总表,主要有以下几列数据:
系部、班级、学生学号、学生姓名、性别、课程名称、成绩、学期、补考成绩、欠费
另一张表是欠费表,主要有以下几列数据:
系部、班级、学号、姓名、欠费费用
根据学校的规定,只有不欠费、补考及格的学生,学生成绩才记入教务系统。所以教务希望能够筛选出那些欠费的学生名单。如果照他们以往做,肯定采用先到欠费表找到欠费学生学号或姓名,再到补考成绩表中查找到指定行再做标记,纯粹手工做法,费时费力。所以我就对他们说了,数据传过来,我帮你们做,使用SQL语句,几分钟就能搞定。
软件工具准备:Excel, Access,Database Tour Pro
具体做法如下:
第一步:建立一个Access文件,将这2张Excel表的数据导入到Access,一张表名是“总表”,一张表名是“欠费”。
第二步:作欠费标记:
set 欠费='是'
where A.学生学号=B.学号
基本上到此就搞定了,使用Database Tour导出为Excel表就可以了。下面几步是为了输出各种不同要求的表。如欠费且及格学生名单、欠费且不及格学生名单、不欠费且及格学生名单、不欠费且不及格学生名单等
第三步:在[总表]中增加“补考成绩标记”字段,整型
主要是因为补考成绩中有缺考的(null)、有百分制成绩,有及格、不及格等5级分制成绩,是字符型。为方便筛选不及格成绩,又懒得去查转换函数,Access的SQL语句中又没有Case语句,所以就设了这么一个字段。使用以下SQL语句进行转换
set 补考成绩标记=-1
where 补考成绩 is null
update [总表] --不及格记作40
set 补考成绩标记=40
where 补考成绩 is not null
and 补考成绩='不及格'
update [总表] --百分制的成绩使用实际成绩表示
set 补考成绩标记= Cint(补考成绩)
where 补考成绩 is not null
and 补考成绩>='0' and补考成绩<='99'
update [总表] --及格以上的成绩记为60
set 补考成绩标记=60
where 补考成绩 is not null
and 补考成绩>'99' and补考成绩<>'不及格'
第四步,就可以使用SQL语句输出各种要求的Excel表了
输出不欠费且补考及格的学生名单:
Where (欠费<>'是' and 欠费 is null )
and 学期='T060702'
and 补考成绩标记>=60
order by id
输出不欠费且补考不及格的学生名单:
Where (欠费<>'是' or 欠费 is null )
and 学期='T060702'
and 补考成绩标记<60
order by id
输出欠费且补考及格的学生名单:
Where 欠费='是'
and 学期='T060702'
and 补考成绩标记>=60
order by id
输出欠费且补考不及格的学生名单:
Where 欠费='是'
and 学期='T060702'
and 补考成绩标记<60
order by id
OK,搞定。