各位,问题如下:需要按照票据类型的不同做加减运算,每个公司有个PO类型的期初数据,遇到应付金额就相加,遇到付款金额就相减,需要新增一个数据列,存放每一行的运算结果,数据需要循环累加或者累减,最后汇总得到当前供应商的最终数据select ta.单据日期, ta.凭证编号,ta.应付款金额,ta.付款申请金额,ta.供应商编码,ta.供应商名称,ta.票据类型,ta.单据号,ta.备注,ta.币种,ta.应收应付标志,ta.结算方式,ta.审核人,ta.制单人,ta.到期日或修改日期from (select ap.dVouchDate as 单据日期,ap.cPZNum as 凭证编号,ap.iAmount as 应付款金额,ap.cdefine5 as 付款申请金额,ap.cDwCode as 供应商编码,v.cVenName as 供应商名称 ,ap.cVouchType as 票据类型,ap.cVouchID as 单据号,case bStartFlag when 1 then '期初余额' end as 备注/*数据属性*/,ap.cexch_name as 币种,ap.cFlag as 应收应付标志,ap.cDigest as 结算方式,ap.cDefine1 as 审核人,ap.cDefine1 as 制单人 ,ap.dmoddate as 到期日或修改日期from Ap_Vouch ap,Vendor vwhere bStartFlag=1/*期初余额表,数据正确*/ and ap.cdwcode=v.cVenCodeunion allselect pb.dpbvdate as 开票日期,pbs.cPZNum as 凭证号,sum(isum)as 本期应付 /*本期应付*/ ,pb.cdefine5 as 备用列,pb.cVenCode as 供应商编码,v.cVenName as 供应商名称,case bFirst when 0 then '采购发票' end as 单据类型 ,cPBVCode as 单据号 ,pb.cPBVMemo as 摘要,pb.cexch_name as币种 ,pb.cdefine1 as 备用列 ,pb.cdefine1 as 备用列,pb.cPBVVerifier as 审核人,cPBVMaker as 制单人,pb.dGatheringDate as 到期日from PurBillVouch pb,PurBillVouchs pbs,Vendor vwhere pb.pbvid=pbs.PBVID and pb.cVenCode=v.cvencode and pb.cVenCode=v.cVenCodegroup by cPBVCode,pb.cPBVMemo ,pbs.cPZNum ,pb.cVenCode ,pb.cPBVVerifier ,cPBVMaker ,pb.cPBVCode ,pb.dGatheringDate ,pbs.PBVID,dpbvdate,bFirst,v.cVenName,pb.cDefine1,pb.cexch_name,cdefine5/*发票*/union allselect ap.dvouchdate as 票据日期,ap.cDefine9 as 凭证编号,ap.cdefine5 as 备用列,aps.iApplyAmt as 本期付款申请金额 ,ap.cdwcode as 供应商编码,v.cVenName as 供应商名称,case cVouchType when 'AP40' then '付款申请单'end as 单据类型, ap.cVouchID as 单据号,ap.cdigest as 摘要,ap.cexch_name as 币种,cdefine1,ss.cSSName as 结算方式,ap.cCheckMan as 检查人,cdefine1,ap.dCloseDate as 关闭日期from AP_ApplyPayVouch ap,AP_ApplyPayVouchs aps,Vendor v,SettleStyle sswhere ap.PID=aps.pid and ap.cDwCode=v.cVenCode and ap.cSSCode=ss.cSSCode/*付款申请表*/)tagroup by ta.供应商编码,ta.供应商名称,ta.单据日期, ta.凭证编号,ta.应付款金额,ta.票据类型,ta.单据号,ta.备注,ta.币种,ta.应收应付标志,ta.结算方式,ta.到期日或修改日期,ta.审核人,ta.制单人,ta.付款申请金额