[干货从下面红字开始]
搞了好久的一个问题终于有结果……
根据学生进出馆的次数和学生报名人数来分配自习间
学生报名是通过工号(学号)来报名的;
而门禁系统统计出来的数据有绝一大部分仅有 卡号没有 工号和姓名,
即便统计出来也不准啊:
各种问,各种找,
问财务,说给的卡号没有问题,
问门禁管理人员,说搞好了给我电话,
搞好几天也没有给我打电话,
据说是简单的看了下没有搞明白,当时一同事在那看见了
就这光导出日志就花了NN久。(门禁是office 2003)每次只能导60000条数据,还要等10分钟导一次,
中间再死几次机,我KAO……
到最后还是要靠自己……
找了好久才从门禁系统里面导出学生的卡号,工号,姓名这张表,
窃喜,
真是什么事都能遇上:结果一对比,
一条数据也对不上,WHAT??????
原来,
门禁系统中,学生信息(卡号,工号,姓名)和日志导出的信息中的卡号居然不一样:
学生信息卡中:卡号是字符型,而日志中则是数字型,所有前面的‘0’字符都给吃了。
OH,SHIT!!这样的系统也能卖??????????
(虽为技术部的我,也只能干瞪眼,因为上系统,只是一拍脑袋的事情。)
我想问我可以骂人吗,
没有办法,还要处理这些破数据,本以为很简单的事,我的机器上仅有ACCESS数据库,
好吧,所有的数据都导入ACCESS,
才发现,需要一个新的字段,把原来的不全的卡号给补全,
(环境:ACCESS 目标:卡号是8位的,不足的前面用‘0’补全)
本以为是多么EASY 的一件事,
可是发现并不容易,各种找:
最后静心想想:
1、把每一个卡号都在前面加8个‘0’
2、再从右边截取8位
那也搞了我一个晚上,
原来就是一句话的问题
select right((''&acountID),8) as cardID,stuID,stuName into countedStu_new from countedStu
直接写入到另一个表中。
最后用的是这样一句话:
select a.stuID,a.stuName,a.cardID,b.times into roomResult from AllCardIDStu as a,countStu_new as b where a.cardID=b.cardID and a.stuID in(select stuID from enrollRoom) order by b.times desc
网上查了好多,都说不行,得搞到SQL SEVER 里写函数什么的。
终于自己一句话就搞定了。