哪位高手能将这段SQL改为存储过程,感谢!!!
dqj 2004-10-10 12:49:40
//汇总库存 如果要汇总2004年10期的数据, mytotalware(2004,10)
procedure TFormTotalWare.myTotalWare(year,month:word);
var
batchno,Seekdate,tempname,houseno,wareno,period:string;
id:integer;
time0,time1:TTime;
begin
if Month>1 then period:=inttostr(Year)+strright(' '+inttostr(Month-1),2)
else period:=inttostr(Year-1)+'12';
Seekdate:=inttostr(Year)+strright(' '+inttostr(Month),2);
tempname:='#'+getrandom;
while tempname=getrandom do tempname:='#'+getrandom;
time0:=time;
tempname:='#0'+getrandom;
LabelMess.Caption:='正在处理当前库存,请稍候......';
LabelMess.update;
query1.close;
query1.sql.text:='delete from waresum where period="'+Seekdate+'"';
query1.execsql;
LabelMess.Caption:='正在汇总当前库存,请稍候......';
LabelMess.update;
//期初
Query1.close;
query1.sql.clear;
query1.sql.add('select wareno,houseno,curr,amount,0 as tag');
query1.sql.add('into '+tempname);
query1.sql.add('from waresum where period="'+period+'" and (amount<>0 or curr<>0)');
query1.sql.add('union all ');
//采购
query1.sql.add('select b.wareno,a.houseno,sum(b.curr) as curr,sum(b.amount) as amount,0 as tag');
query1.sql.add('from wareinh a,wareinm b where a.period="'+seekdate+'" and a.period=b.period and a.noteno=b.noteno');
query1.sql.add('group by b.wareno,a.houseno');
query1.sql.add('union all ');
//调价
query1.sql.add('select b.wareno,a.houseno,sum(b.curr) as curr,0 as amount,1 as tag');
query1.sql.add('from adjusth a,adjustm b where a.period="'+seekdate+'" and a.period=b.period and a.noteno=b.noteno');
query1.sql.add('group by b.wareno,a.houseno');
query1.sql.add('union all ');
//采购退货
query1.sql.add('select b.wareno,a.houseno,-sum(b.curr) as curr,-sum(b.amount) as amount,1 as tag');
query1.sql.add('from refundinh a,refundinm b where a.period="'+seekdate+'" and a.period=b.period and a.noteno=b.noteno');
query1.sql.add('group by b.wareno,a.houseno');
query1.sql.add('union all ');
//调入
if pCbtjfs=1 then query1.sql.add('select b.wareno,a.newhouseno as houseno,sum(b.curr) as curr,sum(b.amount) as amount,1 as tag')
else query1.sql.add('select b.wareno,a.newhouseno as houseno,sum(b.fixedcurr) as curr,sum(b.amount) as amount,1 as tag');
query1.sql.add('from warealloth a,wareallotm b where a.period="'+seekdate+'" and a.period=b.period and a.noteno=b.noteno');
query1.sql.add('group by b.wareno,a.newhouseno');
query1.sql.add('union all ');
//其他入库
query1.sql.add('select b.wareno,a.houseno,sum(b.curr) as curr,sum(b.amount) as amount,1 as tag');
query1.sql.add('from otherinh a,otherinm b where a.period="'+seekdate+'" and a.period=b.period and a.noteno=b.noteno');
query1.sql.add('group by b.wareno,a.houseno');
{query1.sql.add('union all ');
//组装入库
query1.sql.add('select a.wareno,a.houseno,sum(a.curr) as curr,sum(a.amount) as amount,1 as tag');
query1.sql.add('from waremakeh a where a.period="'+seekdate+'"');
query1.sql.add('group by a.wareno,a.houseno');
query1.sql.add('union all ');
//拆装入库
query1.sql.add('select b.wareno,a.houseno,sum(b.curr) as curr,sum(b.amount) as amount,1 as tag');
query1.sql.add('from waretearh a,waretearm b where a.period="'+seekdate+'" and a.period=b.period and a.noteno=b.noteno');
query1.sql.add('group by b.wareno,a.houseno');}
query1.sql.add('union all ');
//发货
query1.sql.add('select b.wareno,a.houseno,-sum(b.fixedcurr) as curr,-sum(b.amount) as amount,1 as tag');
query1.sql.add('from wareouth a,wareoutm b where a.period="'+seekdate+'" and a.period=b.period and a.noteno=b.noteno');
query1.sql.add('group by b.wareno,a.houseno');
query1.sql.add('union all ');
//销售退货
query1.sql.add('select b.wareno,a.houseno,sum(b.fixedcurr) as curr,sum(b.amount) as amount,1 as tag');
query1.sql.add('from refundouth a,refundoutm b where a.period="'+seekdate+'" and a.period=b.period and a.noteno=b.noteno');
query1.sql.add('group by b.wareno,a.houseno');
query1.sql.add('union all ');
//调出
query1.sql.add('select b.wareno,a.oldhouseno as houseno,-sum(b.fixedcurr) as curr,-sum(b.amount) as amount,1 as tag');
query1.sql.add('from warealloth a,wareallotm b where a.period="'+seekdate+'" and a.period=b.period and a.noteno=b.noteno');
query1.sql.add('group by b.wareno,a.oldhouseno');
query1.sql.add('union all ');
//其他出库
query1.sql.add('select b.wareno,a.houseno,-sum(b.fixedcurr) as curr,-sum(b.amount) as amount,1 as tag');
query1.sql.add('from otherouth a,otheroutm b where a.period="'+seekdate+'" and a.period=b.period and a.noteno=b.noteno');
query1.sql.add('group by b.wareno,a.houseno');
query1.sql.add('union all ');
//盘盈
query1.sql.add('select b.wareno,a.houseno,sum(b.curr) as curr,sum(b.amount) as amount,1 as tag');
query1.sql.add('from warecheckh a,warecheckm b where a.period="'+seekdate+'" and a.period=b.period and a.noteno=b.noteno and a.tag=1 and b.amount>0');
query1.sql.add('group by b.wareno,a.houseno');
query1.sql.add('union all ');
//盘亏
query1.sql.add('select b.wareno,a.houseno,sum(b.fixedcurr) as curr,sum(b.amount) as amount,1 as tag');
query1.sql.add('from warecheckh a,warecheckm b where a.period="'+seekdate+'" and a.period=b.period and a.noteno=b.noteno and a.tag=1 and b.amount<0');
query1.sql.add('group by b.wareno,a.houseno');
{query1.sql.add('union all ');
//组装出库
query1.sql.add('select b.wareno,a.houseno,-sum(b.curr) as curr,-sum(b.amount) as amount,1 as tag');
query1.sql.add('from waremakeh a,waremakem b where a.period="'+seekdate+'" and a.period=b.period and a.noteno=b.noteno');
query1.sql.add('group by b.wareno,a.houseno');
query1.sql.add('union all ');
//拆装出库
query1.sql.add('select a.wareno,a.houseno,-sum(a.curr) as curr,-sum(a.amount) as amount,1 as tag');
query1.sql.add('from waretearh a where a.period="'+seekdate+'" ');
query1.sql.add('group by a.wareno,a.houseno');}
query1.execsql;
query1.sql.clear;
query1.sql.add('select wareno,houseno,sum(amount) as amount,sum(curr) as curr,sum(curr)/sum(amount) as price');
query1.sql.add('from '+tempname);
query1.sql.add('group by wareno,houseno');//
query1.open;
id:=query1.RecordCount;
query1.first;
while not query1.eof do
begin
QueryWaresum.close;
QueryWaresum.ParamByName('period').asstring:=seekdate;
QueryWaresum.ParamByName('wareno').asstring:=query1.fieldbyname('wareno').asstring;
QueryWaresum.ParamByName('houseno').asstring:=query1.fieldbyname('houseno').asstring;
QueryWaresum.ParamByName('amount').asfloat:=query1.fieldbyname('amount').asfloat;
QueryWaresum.ParamByName('price').asfloat:=query1.fieldbyname('price').asfloat;
QueryWaresum.ParamByName('curr').asfloat:=query1.fieldbyname('curr').asfloat;
QueryWaresum.execsql;
query1.next;
Label2.caption:=inttostr(id);
Label2.Update;
dec(id);
end;