现有两个表:
zcj //总成绩表
cj1 //单科成绩表
zcj字段:考号,姓名,总成绩,语文成绩,数学成绩;
cj1字段:考号,姓名,语文成绩
如何把cj1 的数据全部导入到zcj数据库中。
条件:
如果考号相同,则考号对应把语文成绩导入,总成绩:=总成绩+语文成绩.
如果考号不同,则直接把考号,姓名,语文成绩导入zcj,并且 总成绩:=总成绩+语文成绩.
是用updata,还是insert!! 如何写啊!
zcj //总成绩表
cj1 //单科成绩表
zcj字段:考号,姓名,总成绩,语文成绩,数学成绩;
cj1字段:考号,姓名,语文成绩
如何把cj1 的数据全部导入到zcj数据库中。
条件:
如果考号相同,则考号对应把语文成绩导入,总成绩:=总成绩+语文成绩.
如果考号不同,则直接把考号,姓名,语文成绩导入zcj,并且 总成绩:=总成绩+语文成绩.
是用updata,还是insert!! 如何写啊!
解决方案 »
- 关于BDE连SQL SERVER的问题(漏掉字段)
- 请问如何截取网络数据包
- 怎样分割这条Update语句?
- 关于动态生成控件的问题
- Delphi 里有没有对话框控件与变量之间传递值的好方法?
- 请问ICS控件包里的WSOCKET控件里用UDP协议发信息,请问有没有象INDY里的IDUDPCLIENT控件
- 中文操作系统+英文DELPHI开发的软件,能不能在英文操作系统上用?
- 在DBGrid中怎样实现这一功能?
- Delphi中是否有类似VB的Collection的东西,或者用什么方法可以实现这种功能?
- 请问哪里有DevExpressVCL20070506的汉化?
- 请问如何使ReadFile()函数不受超时操作的影响?
- 在程序中弹出一个窗口(FORM注入)问题请教(大富翁上放了两天没人回)
分三步吧,这个肯定要的,控制在一个事务就行了:
1.插入cj1有,而zcj总表中没有的:
insert into zcj
(select 考号,姓名,0,语文成绩,0 from cj1
where not exists(select 1 from zcj where zcj.考号=cj1.考号);2.更新cj1,zcj总表中都有的:
update zcj set(考号,姓名,语文成绩) =
(select 考号,姓名,语文成绩 from cj1
where zcj.考号=cj1.考号)
where exists(select 1 from zcj where zcj.考号=cj1.考号);3.更新总成绩
update zcj set 总成绩=语文成绩+数学成绩;-------------------------------------------
不过想了一下,上面的这些语句在access可能通不过,这都是在oracle中常用的,不过我想你的数据量
也不是很大的,就用一个table做循环判断也很快的.
最后提醒一下,你这个表结构是不符合第三范式的,应该去掉"总成绩"这个字段,要读取总成绩用:
select sum(语文成绩+数学成绩) 总成绩 from zcj,还有,你的这些成绩字段都要是非空字段.
很小意思啊,就用循环吧,不过记得给这两个表的考号加上索引,也就一瞬间的功夫.btw:你这个是小学生的管理系统?
各单科成绩在两千时,用循环做已经很慢了!
sql很难写吗?
"考号,姓名,总成绩,语文成绩,数学成绩"这个表是什么意思?还有,如果数据量不算小的话,为什么不考虑用关系数据库呢?sqlserver就很适合你了,
access只是很小应用的桌面数据库,而且没有完备的事务控制,出问题很难处理的.
考号,姓名,总成绩,语文成绩,数学成绩是总成绩表中的部分段,后面还有好多科目,
总成绩表为各单科成绩的汇总. 我只是主管数据录入的,只要把成绩汇总出来,把结果交于数据处理部,我想数据并不是太多,access已经够用了吧.用ado好实现。
sql很难写吗?
我建了索引,用循环做一万条需70-80秒!
select 考号,姓名,0,语文成绩,0 from cj1
where not exists(select 1 from zcj where zcj.考号=cj1.考号)select 考号,姓名,0,语文成绩,0 from cj1
where exists(select 1 from zcj where zcj.考号=cj1.考号)再说一下:如果按照你说的情况,那么你们设计的表结构就很不合理了,这样的话,
再精巧的sql也是白搭上了!呵呵,反正你也不能重新设计整个系统了,随便说说.