愁呀,仓库物品管理系统分类统计数据。……。…………(在线等)

zpc198600 2012-06-27 12:00:17
用的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中,有没有别的方法更方便实现分类统计的,有做过仓库管理系统的朋友给个思路就行不要求有代码
就想实现
...全文
414 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
liangyankenwood 2012-07-03
  • 打赏
  • 举报
回复
另:如果用的是SQL SERVER \ORACLE\SYSBASE\MYSQL 可用CASE WHEN 语句直接提取。
ACCESS10年前就不用了。除了给我儿子做教程例外...
liangyankenwood 2012-07-03
  • 打赏
  • 举报
回复
很单简啊:用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到系统目录中或程序执行目录。
不明问我:谢谢
weichangfeng82 2012-07-03
  • 打赏
  • 举报
回复
对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
zpc198600 2012-07-02
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

我认为你要把之前每个月的统计数据存储下来,查询的时候直接调用即可,
不需要写这么复杂的SQL或者存储过程。
[/Quote]
楼上的不现实想法,那样我的数据量得翻多少呀,有可能是一年,两年,三年的数据
goto1997 2012-06-29
  • 打赏
  • 举报
回复
我认为你要把之前每个月的统计数据存储下来,查询的时候直接调用即可,
不需要写这么复杂的SQL或者存储过程。
jonathanscor 2012-06-29
  • 打赏
  • 举报
回复
在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
张得一 2012-06-29
  • 打赏
  • 举报
回复
这个貌似要写存储过程的,access貌似不支持存储过程
zpc198600 2012-06-29
  • 打赏
  • 举报
回复
楼上两位好像没明白我的意思,是我要一月的也显,二月的也显,三月的也显,四月的还显,就是动态的可以显几个月的,不是说一到七月一起合计了显在一列上,而是动态加列,一个月出库吧加一列,要有下个月再加一列
kaikai_kk 2012-06-27
  • 打赏
  • 举报
回复
where format(出库时间,"yyyymm")>="201201" and format(出库时间,"yyyymm")<="201206"
jerry8 2012-06-27
  • 打赏
  • 举报
回复
left(出库时间,7) 1月到6月 beteen 。。and 不行?

2,507

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧