如将以下两个表进行合并(100分)

  • 主题发起人 主题发起人 jonyhuang
  • 开始时间 开始时间
J

jonyhuang

Unregistered / Unconfirmed
GUEST, unregistred user!
意图:有两个表,结构如下
aa bb
类型 总计 类型 金额
1 10 1
1 5 2
2 6 3
2 9
3 10
1 12

希望将aa表的数据按类型汇总到bb表中,得到以下结果
bb
类型 金额
1 27
2 15
3 10
我试写了一段程序,但行不通,请各位高手指点
VAR CC,EE:STRING;
BEGIN
query1.close;
query1.sql.clear;
query1.sql.add('select 类型,sum(总计) as hj from aa group by
类型');
query1.open;
CC:=inttostr(query1.fieldbyname('hj').asinteger;
(只能得到第一笔的数据,后面的???)
ee:=query1.fieldbyname('类型').asstring;
query1.close;
query2.sql.clear;
query2.sql.add('update bb set 金额='+''''+CC+''''+where
类型='+''''+ee+'''');
query2.ExecSQL; (只能更改一笔数据,后面的???)
END;
这样写法每次只能更换一种类型的数据,再这里我连循环
都不知道怎用,能否有一次全部更换的,请再指点一下,谢谢!

jony
 
query1.open;
query1.first;
while not query1.eof do
begin
CC:=inttostr(query1.fieldbyname('hj').asinteger;
ee:=query1.fieldbyname('类型').asstring;
query1.close;
query2.sql.clear;
query2.sql.add('update bb set 金额='+''''+CC+''''+where
类型='+''''+ee+'''');
query2.ExecSQL;

query1.next
end;
 
agree with yunshang
 
用循环效率太低了
delete bb
insert bb (类型,金额) select 类型,sum(类型) from aa group by 类型
 
g: netwind and yunshang
只是netwind 的方法容易死锁.
 
用下面的方法:
( 我定义的数据库aa为: hj(string 型),zj(number型)
bb为: hj(string型),zj(number型);
关键字段为hj.)
//先清空bb
query1.close;
query1.sql.clear;
query1.sql.add('delete from bb');
query1.execsql;
//把字段hj及其和值插入bb中
query2.close;
query2.sql.clear;
query2.sql.add('insert into bb select hj,sum(zj) from aa group by zj');
query2.execsql;

程序我试过了,在DELPHI5。0下运行正确。
//思路和netwind 相同
 
多人接受答案了。
 
后退
顶部