我现在有两个表,一个表字段为(姓名,科目,分数),另一个表字段为(姓名,总分),现在的问题是表一的科目很多,我想写一个过程把一个学生的总分从表一的分数提取并加起来,并插入到表二中,怎么写?这只是我举的一个例子,实际上表一的数据很多,大约有4、5万条,请教达人!

解决方案 »

  1.   

    我刚接触oracle,请说清楚一些
      

  2.   


    insert into 表二 select 姓名 , sum(分数) from 表一 group by 姓名 order by 姓名
      

  3.   

    表2没有学生
    insert into 表二 select 姓名 , sum(分数) from 表一 group by 姓名 
    表2有学生
    update 表二 set 分数=(select sum(分数) from 表一 where 表一.姓名=表二.姓名)
      

  4.   

    select col,....from 表1
    union all 
    select col,....from 表2
      

  5.   

    MERGE INTO  表2 
       USING (select 姓名 , sum(分数) as 总分  from 表一 group by 姓名)表1 
       ON (表1.姓名= 表2.姓名) 
     WHEN MATCHED THEN 
      UPDATE 
      SET a.总分= b.总分 
     WHEN not MATCHED THEN 
      insert 表2.姓名,表2.总分
     values 表1姓名,表1总分
      

  6.   

    如果你表2不需要实时的话,可以做个JOB,比如说十分钟一次,这样比触发器好点
    最多也就延后10分钟
    甚至如果你的表1是用job来2小时更新一次的话,可以一个JOB做掉
      

  7.   

    如果只想得到总分,不一定用写过程select 姓名,总分=sum(总分)
    from 
    (select 姓名,总分 from 表2
    union all select 姓名,总分=sum(分数) from 表1 group by 姓名
    )A
    group by 姓名有可能姓名相同,我觉得"姓名"应该写为"学生工号"