小问题,难死你!!!!!1(如果ysskmx中有N条相同的记录,在求和时所得结果就是N个XSJE的和)(50分)

M

myjane

Unregistered / Unconfirmed
GUEST, unregistred user!
如果ysskmx中有N条相同的记录,在求和时所得结果就是N个XSJE的和.
with hzado do
begin
close;
sql.Clear;
sql.add('select ss.khdm,ss.khmx,sum(ss.xsje) as qhk,yy.khdm,yy.khmx,sum(yy.skje) as qh');
sql.add('from ysskmx yy,ysxsmx ss');
sql.add('where yy.khdm=ss.khdm)');
sql.add('GROUP BY ss.khdm,ss.khmx,yy.khdm,yy.khmx');
open;
end;
 
ysskmx和ysxsmx是一对多(或多对多)的关系表,主表当然会有多条重复记录了,这个联合查询的
作用就是联合查询,只体现关系上的追溯,如果你想求和,需另执行一条针对单表的求和查询SQL;
也可以这样写:
with hzado do
begin
close;
sql.Clear;
sql.add('select ss.khdm,ss.khmx,(select sum(xsje) form ysxsmx) as qhk,yy.khdm,yy.khmx,(select sum(skje) from ysskmx) as qh');
sql.add('from ysskmx yy,ysxsmx ss');
sql.add('where yy.khdm=ss.khdm)');
sql.add('GROUP BY ss.khdm,ss.khmx,yy.khdm,yy.khmx');
open;
end;
没调试哟!
 
还会有这种事,没看到过,你可以自己一个一个的处理,,
 
TO:liwens
调试不能通过!
 
在select 后加上DISTINCT试试看
sql.add('select DISTINCT ss.khdm,ss.khmx,sum(ss.xsje) as qhk,yy.khdm,yy.khmx,sum(yy.skje) as qh');
sql.add('from ysskmx yy,ysxsmx ss');
sql.add('where yy.khdm=ss.khdm)');
sql.add('GROUP BY ss.khdm,ss.khmx,yy.khdm,yy.khmx');
 
多人接受答案了。
 
顶部