我想把销售表中的不同人的不同商品销售量和金额统计出来,但我写的语句效率太低了,请教各位我这个应怎么改才能效率更高一点?(xf_mx是销售表,sp_name是商品名称表)
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select distinct js_name from xf_mx');
try
ADOQuery1.Open;
except
showmessage('查询销售人数据出错!');
end; if ADOQuery1.RecordCount > 0 then begin
ADOQuery1.First;
SeSkinListBox1.Items.Clear; for i := 0 to ADOQuery1.RecordCount - 1 do begin
if ADOQuery1.FieldByName('js_name').AsString <> '' then
SeSkinListBox1.Items.Add(ADOQuery1.FieldByName('js_name').AsString);
ADOQuery1.Next;
end; end;
if SeSkinListBox1.Items.Count > 0 then begin
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select * from sp_name');
try
ADOQuery1.Open;
except
showmessage('检索商品数据出错!');
exit;
end;
if ADOQuery1.RecordCount > 0 then begin
for i := 0 to SeSkinListBox1.Items.Count - 1 do begin
ADOQuery1.First; for j := 0 to ADOQuery1.RecordCount - 1 do begin
ADOQuery2.Close;
ADOQuery2.SQL.Clear;
ADOQuery2.SQL.Add('select sum(sp_amount),sum(dz_money)
from xf_mx where sp_name=:mz and xf_date>=:kcrq and xf_date<=:jsrq and js_name=:jsr');
ADOQuery2.Parameters.ParamByName('mz').Value := ADOQuery1.FieldByName('c_name').AsString;
ADOQuery2.Parameters.ParamByName('kcrq').Value := dxDateEdit1.date;
ADOQuery2.Parameters.ParamByName('jsrq').Value := dxDateEdit2.date;
ADOQuery2.Parameters.ParamByName('jsr').Value := SeSkinListBox1.Items[i];
try
ADOQuery2.Open; except
showmessage('统计个人销售数据出错!');
end; if ADOQuery2.Fields[0].AsString <> '' then begin
tj_sl := ADOQuery2.Fields[0].AsInteger;
tj_je := ADOQuery2.Fields[1].AsFloat;
ADOQuery3.Close;
ADOQuery3.SQL.Clear;
ADOQuery3.SQL.Add('insert into gr_tjb (sp_name,xs_sl,xs_je,xsr) values(:xc_name,:xc_sl,:xc_je,:xc_xsr)');
ADOQuery3.Parameters.ParamByName('xc_name').Value := ADOQuery1.FieldByName('c_name').AsString;
ADOQuery3.Parameters.ParamByName('xc_sl').Value := tj_sl;
ADOQuery3.Parameters.ParamByName('xc_je').Value := tj_je;
ADOQuery3.Parameters.ParamByName('xc_xsr').Value := SeSkinListBox1.Items[i]; try
ADOQuery3.ExecSQL;
except
mainfrm.app_message.MessageDlg('更新商品状态数据出错!', TMsgDlgType(3), [mbok], 0);
exit;
end; end;
ADOQuery1.Next; end;
end;
end;
end;
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select distinct js_name from xf_mx');
try
ADOQuery1.Open;
except
showmessage('查询销售人数据出错!');
end; if ADOQuery1.RecordCount > 0 then begin
ADOQuery1.First;
SeSkinListBox1.Items.Clear; for i := 0 to ADOQuery1.RecordCount - 1 do begin
if ADOQuery1.FieldByName('js_name').AsString <> '' then
SeSkinListBox1.Items.Add(ADOQuery1.FieldByName('js_name').AsString);
ADOQuery1.Next;
end; end;
if SeSkinListBox1.Items.Count > 0 then begin
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select * from sp_name');
try
ADOQuery1.Open;
except
showmessage('检索商品数据出错!');
exit;
end;
if ADOQuery1.RecordCount > 0 then begin
for i := 0 to SeSkinListBox1.Items.Count - 1 do begin
ADOQuery1.First; for j := 0 to ADOQuery1.RecordCount - 1 do begin
ADOQuery2.Close;
ADOQuery2.SQL.Clear;
ADOQuery2.SQL.Add('select sum(sp_amount),sum(dz_money)
from xf_mx where sp_name=:mz and xf_date>=:kcrq and xf_date<=:jsrq and js_name=:jsr');
ADOQuery2.Parameters.ParamByName('mz').Value := ADOQuery1.FieldByName('c_name').AsString;
ADOQuery2.Parameters.ParamByName('kcrq').Value := dxDateEdit1.date;
ADOQuery2.Parameters.ParamByName('jsrq').Value := dxDateEdit2.date;
ADOQuery2.Parameters.ParamByName('jsr').Value := SeSkinListBox1.Items[i];
try
ADOQuery2.Open; except
showmessage('统计个人销售数据出错!');
end; if ADOQuery2.Fields[0].AsString <> '' then begin
tj_sl := ADOQuery2.Fields[0].AsInteger;
tj_je := ADOQuery2.Fields[1].AsFloat;
ADOQuery3.Close;
ADOQuery3.SQL.Clear;
ADOQuery3.SQL.Add('insert into gr_tjb (sp_name,xs_sl,xs_je,xsr) values(:xc_name,:xc_sl,:xc_je,:xc_xsr)');
ADOQuery3.Parameters.ParamByName('xc_name').Value := ADOQuery1.FieldByName('c_name').AsString;
ADOQuery3.Parameters.ParamByName('xc_sl').Value := tj_sl;
ADOQuery3.Parameters.ParamByName('xc_je').Value := tj_je;
ADOQuery3.Parameters.ParamByName('xc_xsr').Value := SeSkinListBox1.Items[i]; try
ADOQuery3.ExecSQL;
except
mainfrm.app_message.MessageDlg('更新商品状态数据出错!', TMsgDlgType(3), [mbok], 0);
exit;
end; end;
ADOQuery1.Next; end;
end;
end;
end;
解决方案 »
- delphi 基础
- 我在Panel1里放了几个speedbutton,隐藏几个后,如何实现后面的自动靠前?
- 请问:怎么用组合热键呼出隐藏的窗口?
- 高手们,又没有人会做一个中国铁路的地理信息系统,其中包括火车最短路径查询功能,急!!!!
- 如何用程序或某种控件将wav文件立体声转换为单声道,以及不同采样频率、位数之间进行转换
- 求救
- 把 MEMO 里面的内容COPY 到数据库中,急,急,急,马上给分,谢谢,
- 请教一个关于事件触发的问题?
- 新手问题:为什么要注销变量,什么类型的变量需要注销?
- 如何实现jpg图片的上下左右、百叶窗等动画效果而且可控制速度
- 请问怎么给Panel设置图形背景?
- 提一个弱弱的问题.
最基本的sql语句不去学就来写这么长的代码,纯属浪费生命
找本SQL的书看看,比这样瞎折腾有用多了