我想把销售表中的不同人的不同商品销售量和金额统计出来,但我写的语句效率太低了,请教各位我这个应怎么改才能效率更高一点?(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;