日期:2014-05-18  浏览次数:20624 次

SQL 2005 解决方案,之前问了几个问题。分享分布解决途径。求整体解决方法?快速结贴,给分!
系统表:表一:OfficeSupperIn (用品录入表)该表是一个用品录入明细表,用品管理系统的系统表。
  结构:OffsNumber(varchar(50)用品编号),OffsPrice(float 用品录入单价),OffsAmount(int 用品录入数量,OffsSubtime(datetime 用品录入时间)
  表二:OfficeApply(用品出库记录表)该表是用品出库明细表,用品管理系统的系统表。
  结构:OffsNumber(varchar(50)用品编号),OffsAmount(int 用品出库数量),OffsSubtime(datetime 用品出库时间)
  表三:OfficeSupplyStockpile(用品库存表)该表是用品库存表,用品管理系统的系统表。
  结构:OffsNumber(varchar(50) 用品编号),OffsAmount(int 用品库存数量)
解释:表一和表二是明细表,即每次录入,或者出库都有一条记录。而表三,是根据表一和表二实时变动的。
需求:通过数据库后台的数据操作的方法,获得一个月的汇总统计。比如:查询8.29-9.29这一段时间的信息。(当前时间为9.29)
用品编号 上月库存数量(8.29) 金额(8.29) 本月入库数量(8.29-9.29) 金额 本月出库数量(8.29-9.29)金额 本月结存数量(9.29) 金额
问题:1.如果直接通过T-SQL语句查询复杂度太大。需要进行对表一和表二分别汇总,连接达到(本月入库金额 数量 本月出库数量,本月结存数量),不能达到效果。
  2.通过触发器的方式,可以把库存表中金额字段加进去。但是整体效果不好。
求整体解决方案。我自己写了好几个触发器,如有兴趣共同讨论,对于合适的解决方案,重分!

------解决方案--------------------
你所说的问题,不就想计算统计出库存表而已。
其实用两种方法去解决的:
第一个:
表一:OfficeSupperIn 和 表二:OfficeApply,录入完后,不要用触发器去解决,用审核按钮,调用存储过程,写入表表三:OfficeSupplyStockpile,查询直接查OfficeSupplyStockpile。
第二个方法:
直接对表一:OfficeSupperIn 和 表二:OfficeApply计算统计库存,这个需要你优化sql存储过程

两种方法,我建议你用第二种方法,这种方法数据是最准确的,如果优化好的话,速度与第一种方法慢不了多少的。
------解决方案--------------------
建议,增加个月结表,否则每次都需要查询所有数据,日积月累后效率肯定达不到。

增加月结表后,上月数据从月结表取、入出库数据从两个日志表取,最后结存计算出来
需要增加个作业每月定时计算月结表,算法与统计算法基本相同


------解决方案--------------------
入出库数据并发量不大的话,触发器不是不可以考虑,但是前提是你自己对触发器有一定的把握,保证自己能考虑周全的话是可以用的。