现有两个表:
 zcj  //总成绩表
 cj1  //单科成绩表
 
zcj字段:考号,姓名,总成绩,语文成绩,数学成绩;
cj1字段:考号,姓名,语文成绩
 
如何把cj1 的数据全部导入到zcj数据库中。
条件:
     如果考号相同,则考号对应把语文成绩导入,总成绩:=总成绩+语文成绩.
     如果考号不同,则直接把考号,姓名,语文成绩导入zcj,并且 总成绩:=总成绩+语文成绩.
 是用updata,还是insert!! 如何写啊!

解决方案 »

  1.   

    sql语句我不太熟悉,大家帮忙写一下吧!
      

  2.   

    给一些关系数据库用的sql,应该都是标准的sql的,在access就不知道能不能用了,你可以试一试:
    分三步吧,这个肯定要的,控制在一个事务就行了:
    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,还有,你的这些成绩字段都要是非空字段.
      

  3.   

    1、利用sql语句可能有点麻烦还不如试一下BatchMv,delphi自己的数据转换的例子。  C:\Program Files\Borland\Help\Examples\BatchMv2、利用循环逐个将数据导入。
      

  4.   

    如何用BatchMv在导入时加判断呢?
      

  5.   

    >>近二千条
    很小意思啊,就用循环吧,不过记得给这两个表的考号加上索引,也就一瞬间的功夫.btw:你这个是小学生的管理系统?
      

  6.   

    不是小学生管理系统是市成人自考的,科目还不断添加(现在有32个科目了)。唉!
    各单科成绩在两千时,用循环做已经很慢了!
    sql很难写吗?
      

  7.   

    那我想问一下你的表结构设计?
    "考号,姓名,总成绩,语文成绩,数学成绩"这个表是什么意思?还有,如果数据量不算小的话,为什么不考虑用关系数据库呢?sqlserver就很适合你了,
    access只是很小应用的桌面数据库,而且没有完备的事务控制,出问题很难处理的.
      

  8.   

    to: 浩少
     考号,姓名,总成绩,语文成绩,数学成绩是总成绩表中的部分段,后面还有好多科目,
     总成绩表为各单科成绩的汇总. 我只是主管数据录入的,只要把成绩汇总出来,把结果交于数据处理部,我想数据并不是太多,access已经够用了吧.用ado好实现。
     sql很难写吗?
     我建了索引,用循环做一万条需70-80秒!
      

  9.   

    你先试试这两条语句能不能执行:
    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也是白搭上了!呵呵,反正你也不能重新设计整个系统了,随便说说.