涉及表结构如下:
销售主表:销售单号 bill_no,销售日期 bill_date
销售子表:销售单号 bill_no,产品编码 gods_code,销售数量 gods_amou
产品资料表:产品编码 gods_code,产品类型 gods_kind
现在要用一条SQL语句实现:统计一段时间内,某一类型产品的销售数量
谢谢!

解决方案 »

  1.   

    select A.bill_no,A.bill_date,B.gods_code,B.gods_amou,C.gods_kind from 销售主表 as A,销售子表 as B,产品资料表 as C
    where B.bill_no=A.bill_no and C.gods_code=B.gods_code
      

  2.   

    select sum(sell_sub.gods_amou), sell_sub.gods_code from sell_main, sell_sub, product_info where product_info.gods_kind=@Kind and sell_sub.bill_no in (
    select bill_no from sell_main where bill_date between @BeginDate and @EndDate)把三个参数替换成你的数据
      

  3.   

    多谢2位:
    to:lesstif()
         你的SQL语句,有少少问题,我用的是ACCESS数据库,好象按照SQL语法,凡SQL语句中有累计函数(如:SUM...)的好象要用到分组GROUP BY,以前碰到类似问题,
         还有就是我的问题的表达不是很清楚,我不需要求和计算,这里的统计应该改成‘查找出’或‘列出’
    to:helodd(可爱)
       老兄,你的也有问题哟,这样的统计是笛卡儿乘积,没有实际意义,本来很少的记录统计出来会翻几倍,几十倍哟  还有,我的查询里面还要显示销售主表的客户编码,comp_code
      我用了如下代码:
           Sql.Clear;
           Sql.Add('select distinct outmain.comp_code,outgoods.bill_no,outgoods.gods_code,outgoods.unit_pric,outgoods.sub_amou ');
           Sql.Add(' from outmain, outgoods, goods where goods.gods_kind=:gods_Kind and  outmain.bill_date between :Date1 and :Date2 ');
           Parameters.ParamByName('date1').Value:=strtodate(datetostr(dp1.Date)) ;
           Parameters.ParamByName('date2').Value:=strtodate(datetostr(dp2.Date)) ;
           Parameters.ParamByName('gods_kind').Value:=trim(combobox5.Text) ;
           Open;
    显示出来的数据翻了一倍,用了distinct 也没用,还有商品类型过滤没起作用,
    请各位赐教,我觉得可能用到左联结,可我不太熟悉那玩意儿
      

  4.   

    呵,楼主也想到要用左联连了,那就用呗,用一次就知道了from 表1 left join 表2 on <条件>上面的这个表达示中,表1是主表,表2是从表,这样的连接除了返回满足条件的记录外,还会返回主表中不符合条件的记录。试试吧
      

  5.   

    select 。。 from 。
    where 表一的条件 = 表二的条件 and 表二的条件=表三的条件