我设计的表a(id,number)
其中id是主键,number是int型
我想当我输入的数据中,如果出现id相同的,用什么样的sql语言才能把number的数累加,而不用添加相同id的记录了。

解决方案 »

  1.   

    如果无法预知同个ID的记录有多少,则单个sql是无法解决问题的,可写个存储过程,通过循环完成。
      

  2.   

    谢谢你
    我想如果where id=xxx,我就想把number累加,现在就不知sql怎么写?
      

  3.   

    要看你的数据是如何插入,是从表b插入表a,还是直接往表a中更新记录
    从表b插入表a
    update a set number=number+(select sum(number) from b where id=xxx) where id=xxx;直接往表a中更新记录
    update a set number=number+输入值 where id=xxx;
      

  4.   

    3楼的语句是不只有在嵌入式SQL才能实现啊,我估计也只能这样了,呵呵
      

  5.   

    可以选一个不用的id替换:new.id:=0;因为你的id是主键不能重复的!
    还有number是关键字,最好不要用,用的话要加双引
    SQL> edit
    已写入 file afiedt.buf  1    CREATE OR REPLACE TRIGGER T_TRIG
      2  before insert on t
      3  for each row
      4  declare
      5  cnt number;
      6  begin
      7  delete from t where id=0;
      8  select count(id) into cnt from t where id=:new.id;
      9  if cnt=1 then
     10  update t set num=num+:new.num where id=:new.id;
     11  :new.id:=0;
     12  end if;
     13* end;
    SQL> /触发器已创建SQL> select * from t;                                                nihqo
            ID        NUM
    ---------- ----------
             1          1SQL> insert into t values(1,1);已创建 1 行。SQL> select * from t;                                                nihqo
            ID        NUM
    ---------- ----------
             1          2
             0          1SQL> insert into t values(1,2);已创建 1 行。SQL> select * from t;                                                nihqo
            ID        NUM
    ---------- ----------
             1          4
             0          2SQL> insert into t values(1,3);已创建 1 行。SQL> select * from t;                                                nihqo
            ID        NUM
    ---------- ----------
             1          7
             0          3SQL>