数据库是ACCESS!
库存表:
名称    类型    数量   价格    日期
CPU     intel    2     640  2002-10-22
CPU     intel    2     680  2002-10-25
显示器  三星     3     870  2002-10-25销售表:
单句    名称    类型    数量   价格    日期
XS001   CPU      intel   3   720   2002-10-30 
XS001  显示器  三星     3     900   2002-10-25
这样的算利润要如何算呢?正确应该是290元才对!可为什么我用下列的语句
with adoquery1 do
begin
  close;
  sql.Clear;
  sql.add('select 销售表.单据,sum((销售表.价格-库存表.价格)*销售表.数量) as 利润,min(库存表.价格) as 价格  from 销售表,库存表 
  where 销售表.名称=库存表.名称 and 销售表.型号=库存表.型号 and 销售表.单据='''+dbedit1.text+''' group by 销售表.单据');
  open;
   lrun_string:=adoquery1.FieldValues['lirun'];
按我这样的SQL语句,得到的却是370,和事实有很大的出入呀,这是为什么呢?
我知道语句多算了一部分的CPU,可不知道如何更改好!
谢谢!大家好,就当帮帮我吧!:(

解决方案 »

  1.   

    问题在于你的库存表中
    名称    类型    数量   价格    日期
    CPU     intel    2     640  2002-10-22
    CPU     intel    2     680  2002-10-25
    同一型号的CPU价格不一样?,我的思路如下:
    如果是不同时间进的CPU的价格不一样,那应该在库存
    表中加上一个编号字段,以表示同一型号的产品的价格有可能不同,
    库存表:
    编号    名称     类型    数量   价格    日期
    P001    CPU     intel    2     640  2002-10-22
    P002    CPU     intel    2     680  2002-10-25
    P003    显示器   三星     3     870  2002-10-25
    然后销售表也加上一个货物编号字段,去掉名称和类型字段
    单句    货物编号         数量   价格    日期
    XS001   P001             2     720   2002-10-30 
    XS001   P002             1     720   2002-10-30
    XS001   P003             3     900   2002-10-25
    SQL语句变一下:
    'select 销售表.单据,sum((销售表.价格-库存表.价格)*销售表.数量) as 利润, Min(库存表.价格) as 价格  from 销售表,库存表 
      where 销售表.货物编号=库存表.编号 and  销售表.单据='''+dbedit1.text+''' group by 销售表.单据'