有两条记录:   
              no      orimoney    newmoney
            001       500          600
            002       1000         NULL如何将 两条记录的 orimoney 和newmoney 字段值就和,要求如果某条记录有newmoney值的话,这条记录的orimoney的值就不用,没有则用最好能用query, 如果用 select ( sum(orimoney)+sum(newmoney))as money ,这样的话,求和就多了500 了,,不知该怎么做哪???

解决方案 »

  1.   

    select ( sum(orimoney+newmoney))as money
      

  2.   

    需要判断nullselect ( sum(IsNull(orimoney,0)+IsNull(newmoney,0)))as money
    from table
      

  3.   

    to  hammer_shi  
        这样子sum出来不也是 2100 吗,,另外sum(a+b) 和sum(a)+sum(b) 有什么不同吗,盼赐教to firetoucher
        isnull函数是不是:当第一参数为空,则置其值为第二参数啊??
      

  4.   

    query.first;
    sum:=0;
    while not query.eof do
    begin 
    if query.fieldbyname('new').asinteger='null' then
       sum:=query.fieldbyname('ori').asinteger+sum
      else sum:=query.fieldbyname('new').asinteger+sum;
    end
    return sum;
    不是什么都要依赖数据库啊
      

  5.   

    isnull 好像也是不行啊,,,
      

  6.   

    to  hightz(tiger)
        就是怕有人跟我说这种方法,所以才 在开始时特加了 使用query 
        这种方法是显示后修改,,而客户的要求是 直接就显示正确的金额,所以我也只得去用query进行查询出来
      

  7.   

    因为你的求和有条件判断,最好如下,结构比较清晰:
     sum:=0;
    with query do
      begin
      close;
      sql.clear;
      sql.add('select orimoney ,newmoney from tablename );
      first;
      while not eof do
       begin
        if trim(fields[1].asstring)='' then sum:=sum+fields[0].asinteger
              else sum:=sum+fields[1].asinteger;
       next;
       end;//while
      end;//with
      

  8.   

    问题是,sum变量还要通过dbgrid赋给money字段显示才是对的,因为我并不想显示orimoney和newmoney这两个字段,
    那么第一次查询出来的就是2100,而非1600,
      

  9.   

    isnull在sql server中就是你说的意思
    你的数据库是什么?
      

  10.   

    那为什么不行?
    select (select sum(IsNull(orimoney,0)) from table) + (select sum(IsNull(newmoney,0)) from table) as money
      

  11.   

    实际上,如果能做到  判断: 若newmoney字段不为空,则将orimoney字段的值置为0
    才是有意义的
      

  12.   


    不好意思,理解错
    应该是
    select sum(IsNull(newmoney,orimoney)) from table
      

  13.   

    fire哥们,就是嘛,,你原来的写法 太让人恨了,,因为它就差那么一点点就对了,而那一点点正好是后一种方法,你实在是太强了,兄弟, 真想给你100分,呵呵,对了有qq吗,