是将符合那两个条件的筛选出来,然后把总数量求出来显示为“销售量”,还有单价*数量求和显示为“总价”
代码是下面的procedure TForm2.Button28Click(Sender: TObject);
begin
  with ADOQuery10 do
  begin
    Close;
    SQL.Clear;
    SQL.Add('select  sum(数量*单价) as 总价,sum(数量)as 销售量  from 批发中心销售情况统计');
    SQL.Add('where  '+ Combobox7.Text + ' like ''%' + Edit71.text + '%''');
    SQL.Add('and  销售时间 between :mm and :nn');
    Parameters.ParamByName('mm').Value:=datetostr(DateTimePicker1.Date);
    Parameters.ParamByName('nn').Value:=datetostr(DateTimePicker2.Date);
    Open;
    Edit72.Text:=inttostr(fieldbyname('销售量').asinteger);
    Edit73.Text:=inttostr(fieldbyname('总价').asinteger);  end;
end;
数量和总价求出来了也在edit显示了,但是有个问题,dbgrid里不显示我筛选出来的内容了,肿么办?如果把select改成
 SQL.Add('select  批发中心编号, 批发中心名称, 顾客编号, 顾客名称, 产品名称, 单价, 数量, 销售时间,sum(数量*单价) as 总价,sum(数量)as 销售量  from 批发中心销售情况统计');
的话,就会提示出错:试图执行的查询中不包含作为合计函数一部分的特定表达式“批发中心编号”求解答TAT

解决方案 »

  1.   

    dbgrid 设置一个 datasourcce ,datasource 组件指向 ADOQuery10 就实现查询联动显示了。
      

  2.   

    SQL.Clear;
    SQL.Text := 'select sum(数量*单价) as 总价,sum(数量)as 销售量 from 批发中心销售情况统计'
        + ' where '+ Combobox7.Text + ' like ''%' + Edit71.text + '%'''
        + ' and 销售时间 between ''' + datetostr(DateTimePicker1.Date)
        + ''' and ''' + datetostr(DateTimePicker2.Date) + '''';
    这样自己合成后试一下,另外,先把sql语句用程序输出到memo里,复制到查询分析器里运行一下看看,是不是真的有结果
      

  3.   

    dbgrid是根据Dataset查询什么,显示的就是什么要根据某列分组合计,要加上group by,如:
    SQL.Add('select 批发中心编号,sum(数量*单价) as 总价,sum(数量)as 销售量 from 批发中心销售情况统计' group by 批发中心编号);
      

  4.   

    dbgrid是根据Dataset查询什么,显示的就是什么要根据某列分组合计,要加上group by,如:
    SQL.Add('select 批发中心编号,sum(数量*单价) as 总价,sum(数量)as 销售量 from 批发中心销售情况统计 group by 批发中心编号' );
     
      

  5.   

    第一个问题
      dbgrid的数据集和程序处理时所要的数据集不要是同一个,如果是同一个,你dbgrid的数据集变了,当然不显示你原来的结果,可以拉两个adoquery,adoquery1作为dbgrid的数据集, adoquery2在操作的时候用。
    ~~~~~~~~~~~~~~~~
    第二个问题。
      1. select sum(a),sum(b) from table1
      和
      2. select c,sum(a),sum(b) from table1 group by c
    这两者你要弄明白
      1: 对table1的,a,b列的所有数据分别加总
      2: 对table1按c对a,b列进行分组。