使用SQL语句进行数据比对

原创 2007年09月22日 21:09:00

       数据比对在办公应用中非常普遍,常见的是人工比对,不仅费时费力,还无法避免会出现差错。
       今日,教务处传过来两张Excel表格,一张是补考成绩汇总表,主要有以下几列数据:
            系部、班级、学生学号、学生姓名、性别、课程名称、成绩、学期、补考成绩、欠费
      另一张表是欠费表,主要有以下几列数据:
           系部、班级、学号、姓名、欠费费用
       根据学校的规定,只有不欠费、补考及格的学生,学生成绩才记入教务系统。所以教务希望能够筛选出那些欠费的学生名单。如果照他们以往做,肯定采用先到欠费表找到欠费学生学号或姓名,再到补考成绩表中查找到指定行再做标记,纯粹手工做法,费时费力。所以我就对他们说了,数据传过来,我帮你们做,使用SQL语句,几分钟就能搞定。
      软件工具准备:Excel, Access,Database Tour Pro
      具体做法如下:
      第一步:建立一个Access文件,将这2张Excel表的数据导入到Access,一张表名是“总表”,一张表名是“欠费”。
      第二步:作欠费标记:

update [总表] A, [欠费] B
set 欠费=''

where A.学生学号=B.学号

      基本上到此就搞定了,使用Database Tour导出为Excel表就可以了。下面几步是为了输出各种不同要求的表。如欠费且及格学生名单、欠费且不及格学生名单、不欠费且及格学生名单、不欠费且不及格学生名单等
      第三步:在[总表]中增加“补考成绩标记”字段,整型
      主要是因为补考成绩中有缺考的(null)、有百分制成绩,有及格、不及格等5级分制成绩,是字符型。为方便筛选不及格成绩,又懒得去查转换函数,Access的SQL语句中又没有Case语句,所以就设了这么一个字段。使用以下SQL语句进行转换

update [总表]  --缺考记作-1
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表了
输出不欠费且补考及格的学生名单:
 

Select * from [总表]
Where (欠费<>''  and 欠费 is null)
      
and 学期='T060702'

      
and 补考成绩标记>=60
order by id

输出不欠费且补考不及格的学生名单:

Select * from [总表]
Where (欠费<>'' or 欠费 is null)
      
and 学期='T060702'

      
and 补考成绩标记<60
order by id

输出欠费且补考及格的学生名单:

Select * from [总表]
Where 欠费=''
      
and 学期='T060702'
      
and 补考成绩标记>=60
order by id

输出欠费且补考不及格的学生名单:

Select * from [总表]
Where 欠费=''
      
and 学期='T060702'
      
and 补考成绩标记<60
order by id

 OK,搞定。

使用SQL语句 进行数据持久化

//使用SQL 需要先引入 sqlite3.h 头文件  7.0之前的版本和之后的版本引入的文件 后缀名不一样 7.0版本是libsqlite3.0.tbd 之前的版本都是libsqlite3.0.d...

SQL Server使用Merge语句当源表数据集为空时,无法进行查询的问题

今天使用Merge语句时遇到了一个问题,当源表数据集为空时,merge就不工作了。下面举一个例子来具体说明一下: 有两个表SourceTable为登陆表,TargetTable为授权表,如果访问用户...

使用SQL语句对Oracle数据库数据进行拼接

=====================================================================================

load data 方式导入的数据不可以用binlog日志进行恢复,因为binlog里面不产生insert sql语句。

QQ群里面有人问起这个问题:    用load data 导入数据的时候,在binlog文件中记录的不是insert 语句,这样的话,如果用load data 导入数据,当需要恢复数据库的时候  bi...

Mysql将查询后的数据进行排名的SQL语句

有时我们需要对我们数据库某一张表进行排序,本文介绍了3种将已排序数据进行一个排名并输出的SQL...

load data 方式导入的数据不可以用binlog日志进行恢复,因为binlog里面不产生insert sql语句。

QQ群里面有人问起这个问题:    用load data 导入数据的时候,在binlog文件中记录的不是insert 语句,这样的话,如果用load data 导入数据,当需要恢复数据库的时候  bi...
  • mchdba
  • mchdba
  • 2013年07月18日 11:34
  • 2998

两个数据库进行数据比对(DataTable对比)

前一段时间做了一个数据比对的工作,大致的要求是这样: 首先从A库导出产品的数据模型到Excel中,导出完成时记录导出产品条目以及产品结构到B库的Model表和Partstr表中。然后就是每隔一段固定...

python的http代理,对请求的头文件中的json数据进行比对-------(2)

#coding=utf-8 #作者:ewang #版本:2.7 #功能描述:编写python版本,对特定的网站,获取相关的json值 import socket import thread i...

如何使用Beyond Compare软件进行代码比对

什么是BeyondCompare? Beyond Compare 是一款不可多得的专业级的文件夹和文件比对工具。使用它可以很方便的比对出两个文件夹或者文件不同之处。并把...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用SQL语句进行数据比对
举报原因:
原因补充:

(最多只允许输入30个字)