sql的问题(50分)

  • 主题发起人 主题发起人 fstao
  • 开始时间 开始时间
F

fstao

Unregistered / Unconfirmed
GUEST, unregistred user!
数据库是mssql7,有dbo.cgd_master_ku(采购单)、dbo.fkd_master_ku(付款单,主表)和dbo.fkd_detail_ku(付款单,细表),
数据如下:
(1)、采购单(id为内部id,po为po号,cgjhj为采购价合计,hwybf为海外运保费)
id po cgjhj hwybf
1 po_2 8690
2 po_1 15971

(2)、付款单(主表,id为内部id,fk_lb为付款类别,wbje为外币金额)
id fk_lb wbje
1 采购_海外运保费 1085

(3)、付款单(细表,id与主表的id关联,po_id与采购单的id关联)
id po_id je
1 2 987
1 1 98

我想计算采购单的hwybf,是根据付款单细表的je进行分摊,例如,采购单po=po_2,则hwybf=98*8690/1085=784.90
采购单po=po_1,则hwybf=987*15971/1085=14528.46

SQL语句如下(我之所以用sum(f2.je*cgd.Cgjhj/f1.wbje)和group by f2.po_id是有可能对“采购_海外运保费”
分几次付款):
update cgd_master_ku set Hwybf=(select sum(f2.je*cgd.Cgjhj/f1.wbje) from fkd_master_ku f1,fkd_detail_ku f2,cgd_master_ku cgd
where f1.fklb='采购_海外运保费' and f1.id=f2.id and cgd_master_ku.id=f2.Po_id group by f2.po_id)

但是计算的结果有点莫明其妙:
采购单
id po cgjhj hwybf
1 po_2 8690 2435.19
2 po_1 15971 24525.81

请帮忙修改一下的sql语句。多谢!
 
查看一下付款单细表po_id相同的记录为几个,如果是多个,计算应该没问题;
如果每一个po_id在付款单细表是唯一的话,把sum去掉试试。
 
试试这个:
update cgd_master_ku set Hwybf=(select sum(f2.je)*cgd.Cgjhj/f1.wbje from fkd_master_ku f1,fkd_detail_ku f2,cgd_master_ku cgd
where f1.fklb='采购_海外运保费' and f1.id=f2.id and cgd_master_ku.id=f2.Po_id group by f2.po_id)
 
update cgd_master_ku set Hwybf=
(select sum(f2.je)*sum(cgd.cgjhj)/sum(f1.wbje) from cgd_master_ku cgd,fkd_master_ku f1,fkd_detail_ku f2
where cgd.id=cgd_master_ku.id and f1.fk_lb='采购_海外运保费' and f1.id=f2.id and f2.po_id=cgd.id)
 
接受答案了.
 

Similar threads

后退
顶部