有两条记录:
no orimoney newmoney
001 500 600
002 1000 NULL如何将 两条记录的 orimoney 和newmoney 字段值就和,要求如果某条记录有newmoney值的话,这条记录的orimoney的值就不用,没有则用最好能用query, 如果用 select ( sum(orimoney)+sum(newmoney))as money ,这样的话,求和就多了500 了,,不知该怎么做哪???
no orimoney newmoney
001 500 600
002 1000 NULL如何将 两条记录的 orimoney 和newmoney 字段值就和,要求如果某条记录有newmoney值的话,这条记录的orimoney的值就不用,没有则用最好能用query, 如果用 select ( sum(orimoney)+sum(newmoney))as money ,这样的话,求和就多了500 了,,不知该怎么做哪???
from table
这样子sum出来不也是 2100 吗,,另外sum(a+b) 和sum(a)+sum(b) 有什么不同吗,盼赐教to firetoucher
isnull函数是不是:当第一参数为空,则置其值为第二参数啊??
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;
不是什么都要依赖数据库啊
就是怕有人跟我说这种方法,所以才 在开始时特加了 使用query
这种方法是显示后修改,,而客户的要求是 直接就显示正确的金额,所以我也只得去用query进行查询出来
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
那么第一次查询出来的就是2100,而非1600,
你的数据库是什么?
select (select sum(IsNull(orimoney,0)) from table) + (select sum(IsNull(newmoney,0)) from table) as money
才是有意义的
不好意思,理解错
应该是
select sum(IsNull(newmoney,orimoney)) from table