有两个表a和b,a包含商品编号、商品名称、库存数量、单价等字段(商品编号为主键),b包含销售单编号、商品编号、销售数量、销售日期等字段(销售单编号、商品编号为主键);
现要在dbgrid里面按时间段(data1到data2)统计并显示商品编号、商品名称、库存数量、单价、销售总量、销售总额。该如何实现以上功能???
相关的SQL语句怎么写???
代码全最好!毕竟我是初学,我怕看不懂,呵呵呵!麻烦大家了。

解决方案 »

  1.   

    select a*.,n.销售总量,n.销售总额 from a,(select b.商品编号,sum(销售数量)as '销售总量',sum(销售数量*单价)as '销售总额' from b group by  b.商品编号)n where n.商品编号=a.商品编号查询自己写
      

  2.   

    按你的需求只需加一个dbgrid,一个query,一个datasource设置一下就可以了.
    具体的SQL如下:
    select 
      a.商品编号,
      a.商品名称,
      sum(a.库存数量) 库存数量,
      a.单价,
      sum(b.销售数量) 销售数量,
      sum(a.单价*b.销售数量) 销售金额
    from a,b
    where a.商品编号=b.商品编号
    and b.销售日期>=date1 and b.销售日期<date2+1;但我觉得你的设计有些问题,首先:当商品卖完后,你的数据还保留在库存表中吗?
    第二.商品的销售价格一直都不变吗,我感觉销售价格应该放在销售表中
    第三.在库存表中应该保存的是库存的成本(你是按什么原则进行库存的管理呢,一般的有先进先出,加权等)
    第四.我感觉你应该建立一个商品字典表,库存及销售表和这个字典表进行关联
    最后,对于进销存,应该通过一个报表计算,比如,期初库存,销售,出库等信息
    以上供你参考,只是我的建议
      

  3.   

    呵呵呵!初学,没办法,设计的确存在很多缺陷!不过a表不是库存表,而是商品基本信息表,我只是把单价和库存数量放在商品基本信息表里面,不过这好像不是问题所在,我另外建有销售表和进货表,通过进货管理及其销售管理来改变基本信息里面的库存数量,不过你说的很对,商品价格的确会变动,原本我也是设在销售表格里面,后来为了读取商品基本信息方便就改掉了,本来还想设置一个字段(在基本信息里面),原来调整价格,给忘记了,谢谢你提醒!
    不过你的答案好像有点问题,库存数量干吗求和???直接从a表读取就可以了,在dbgrid里面显示的商品编号、商品名称、库存数量、单价应该跟a表的相关记录的信息一样,而销售总量应该是所查询的时间段里面所销售的同一商品的销售数量的sum,销售总额是对应这一商品的单价*销售,而不是所有商品的销售总额,只是某一商品的销售总额,可能我没有详细描述,所以你们搞错了!谢谢了,加油!给我正确详细的答案。        
      

  4.   

    如果库存数量不求和,这样写.我上面没有加group by ,把这个加上.
    select 
      a.商品编号,
      a.商品名称,
      a.库存数量,
      a.单价,
      sum(b.销售数量) 销售数量,
      sum(a.单价*b.销售数量) 销售金额
    from a,b
    where a.商品编号=b.商品编号
    and b.销售日期> =date1 and b.销售日期 <date2+1; 
    group by   a.商品编号,  a.商品名称,  a.库存数量,  a.单价
      

  5.   

    SELECT a.商品名称,a.库存数量,b.销售单编号,b.商品编号,SUM(b.销售数量),SUM(a.单价*b.销售数量) AS 销售总额
     from a JOIN b ON a.商品编号=b.商品编号 where 销售日期 between 日期1 and 日期2 
    GROUP BY a.商品编号,a.商品名称,a.库存数量,b.销售单编号,b.商品编号,b.销售日期
      

  6.   

    我只是把单价和库存数量放在商品基本信息表里面,不过这好像不是问题所在
    你的这个价格如果是变的,以后统计时,只能是最新的价格的统计,根本就不是历史的销售信息了.
    你找一本数据库的书,看一下查询语句的写法,很有帮助的,你的这个,其实就是一个sql查询的问题.
      

  7.   

    我只是把单价和库存数量放在商品基本信息表里面,不过这好像不是问题所在
    你的这个价格如果是变的,以后统计时,只能是最新的价格的统计,根本就不是历史的销售信息了.
    你找一本数据库的书,看一下查询语句的写法,很有帮助的,你的这个,其实就是一个sql查询的问题.