用的ACCESS数据库加DELPHI,现在有三个表,一个物品信息表,一个入库表,一个出库表
现在要统计出一个月的出入库明细,比如五月份A物品出库几个,入库几个,还剩几个,这个已经实现了
可现在要一次性统计几个月的并按月分开显示在一个窗体,就不知道怎么用SQL实现了
 str:='SELECT stock.编码, Sum(enterwh.入库数量) AS 入库总计,'
       +'Sum(outwh.出库数量) AS 出库总计'
       +' FROM (stock LEFT JOIN (select * from outwh where left(出库时间,7)="2012-06") AS a ON stock.编码 = a.编码) LEFT JOIN (select * from enterwh where left(入库时间,7)="2012-06") AS b ON stock.编码 = b.编码'
       +' GROUP BY stock.编码';这个代码是统计出2012年6月份的,同样我可以在窗体上放个日期选择组件来实现换着日期查出不同月的,可如果要统计一个日期段的不知道怎么搞,比如,我要统计出1月到6月每月的出入库明细,就是说动态的选择日期范围,然后显在DBGRID中,有没有别的方法更方便实现分类统计的,有做过仓库管理系统的朋友给个思路就行不要求有代码
就想实现

解决方案 »

  1.   

    left(出库时间,7) 1月到6月 beteen 。。and 不行?
      

  2.   

    where format(出库时间,"yyyymm")>="201201" and format(出库时间,"yyyymm")<="201206"
      

  3.   

    这个貌似要写存储过程的,access貌似不支持存储过程
      

  4.   

    在group by中加入月份时间,然后,输出的列中也加上月份时间,剩下的事就是行转列了
    假设上面查询的结果如下:
    编号(bm)  月份(rq)  数量(mount)
    select bm ,
    max(case rq when '2012-01' then mount else 0 end) '2012-01',
    max(case rq when '2012-02' then mount else 0 end) '2012-02',
    ..
    from table
    group by rq
      

  5.   

    我认为你要把之前每个月的统计数据存储下来,查询的时候直接调用即可,
    不需要写这么复杂的SQL或者存储过程。
      

  6.   

    对ACCESS不熟悉,好像ACCESS没有像ORACLE里面的FULL OUTER JOIN?
    不知道这样行不SELECT c.月份,c.编码, Sum(c.入库总数量) AS 入库总计,
    Sum(c.出库总数量) AS 出库总计
    from
    (
        select a.编码,a.出库月份 月份,a.出库总数量 ,b.入库总数量
            (
                select 
                left(出库时间,7) 出库月份,编码,Sum(出库数量) 出库总数量 
                from outwh 
                group by left(出库时间,7),编码
            ) as a
            left join 
            (
                select left(入库时间,7) 入库月份,编码,Sum(入库数量) 
                from enterwh
                group by left(入库时间,7),编码
            ) as b
            on a.编码=b.编码 and a.出库月份=b.入库月份
        union 
            select b.编码,b.入库月份 月份,a.出库总数量 ,b.入库总数量
            (
                select 
                left(出库时间,7) 出库月份,编码,Sum(出库数量) 出库总数量 
                from outwh 
                group by left(出库时间,7),编码
            ) as a
            right join 
            (
                select left(入库时间,7) 入库月份,编码,Sum(入库数量) 
                from enterwh
                group by left(入库时间,7),编码
            ) as b
            on a.编码=b.编码 and a.出库月份=b.入库月份
    ) c
      

  7.   

      很单简啊:用ClientDataSet1 数据集,超复杂的报表都搞得掂。
      
      先在ClientDataSet1定义好字段用以下语句初始化: IF ClientDataSet1.Active Then ClientDataSet1.EmptyDataSet else
     ClientDataSet1.CreateDataSet; (在建立事件中),关闭事件用 ClientDataSet1.close;-----------------------------用SQL 提取1--7月份的数据,判定是那一个月份的就INSERT到ClientDataSet1中搞定。注:如果不能运行,要用regsvr32 c:\MIDAS.DLL 注册。目录是MIDAS.dll
    所有的目录,一般COPY到系统目录中或程序执行目录。
     不明问我:谢谢
      

  8.   

     另:如果用的是SQL SERVER \ORACLE\SYSBASE\MYSQL 可用CASE WHEN 语句直接提取。
    ACCESS10年前就不用了。除了给我儿子做教程例外...