当前位置: 代码迷 >> Sql Server >> 一个进销存Sql话语!高手来拿分
  详细解决方案

一个进销存Sql话语!高手来拿分

热度:26   发布时间:2016-04-27 11:57:42.0
一个进销存Sql语句!高手来拿分!
SQL code
                 【勾稽关系】进销存报表以开始时间和结束时间为查询条件 写成存储过程  不会弄了!疑点一:【上月初】:比如:这个月是7月份(上月初就是6月30日23点59分59秒以前的采购商品)【本月】就是:7月1日0时0分0秒-----到现在的我这边不知道怎么用时间控制,我感觉得用参数来控制 时间参数,如果谁做过这样的报表的话 帮一下写成存储过程。Sql提示:------------------------------------------------- --skuNo 商品编号  productName 商品名称 ArriveQty入库数量   Price 采购价格   RtnQty采购退货数量------商品编号、商品名称、上月初平均单价、上月初数量、上月初金额select t1.SkuNo,t1.ProductName,sum(isnull(t1.Price*t1.ArriveQty-t1.Price*t1. --,0.00)) / nullif((sum(t1.ArriveQty-t1.RtnQty)),0.00)as 上月初平均单价,SUM(t1.ArriveQty-t1.RtnQty)上月初数量,(sum(isnull(t1.Price*t1.ArriveQty-t1.Price*t1.RtnQty,0.00)) / nullif((sum(t1.ArriveQty-t1.RtnQty)),0.00)*SUM(t1.ArriveQty-t1.RtnQty)) as 上月初金额from V_PO_OrderItem as t1 where  t1.CreateTime>=(SELECT DATEADD(Month,-1,CONVERT(datetime,CONVERT(char(8),getdate(),120)+'1'))) and        t1.CreateTime<=(SELECT DATEADD(Month,-1,DATEADD(s,-1,CONVERT(char(8),DATEADD(Month,1,getdate()),120)+'1')))group by   t1.SkuNo,t1.ProductNameselect t1.SkuNo,t1.ProductName,SUM(ArriveQty)as ArrQty from V_PO_OrderItem as t1group by t1.SkuNo,t1.ProductName---商品编号、商品名称、本月进货数量、本月进货单价select t2.SkuNo,t2.ProductName,SUM(t2.ArriveQty)本月进货数量,sum(isnull(t2.Price*t2.ArriveQty,0.00)) / nullif((sum(t2.ArriveQty)),0.00)as 本月进货单价,(SUM(t2.ArriveQty)*(sum(isnull(t2.Price*t2.ArriveQty,0.00)) / nullif((sum(t2.ArriveQty)),0.00))) as 本月进货金额from V_PO_OrderItem as t2where  t2.CreateTime>=(SELECT CAST(CONVERT(varchar(10),GETDATE()-datepart(day,GETDATE())+1,120)as datetime))   and t2.CreateTime<=(SELECT dateadd(second,-1,dateadd(month,1,CONVERT(varchar(10),GETDATE()-datepart(day,GETDATE())+1,120))))   group by t2.SkuNo,t2.ProductName ,t2.CreateTime-------------------------------------------------- 系列号(随机生成)这个不会弄 商品编号    SkuNo 商品名称    ProductName 采购价格     Price  上月平均单价    (1) 上月初数量      (2) 上月初金额      (3)=(1)*(2) 本月进货数量    (4) 本月进货单价    (5     本月进货金额    (6)=(4)*(5) 本月平均单价    (7)=(3)+(6)/(2)+(4) 【单价采用加权平均方进行计算 //这个就是(6月30日23点59分59秒以前+本月的)总价格/(6月30日23点59分59秒以前+本月的)总数量---应该是这样的---------------------------------------------------- 



------解决方案--------------------
等高手

关于时间的疑点,可以帖点看过的高手的代码

--上个月的最后一天 :本月第一天减2ms.
SELECT dateadd(ms,-2,DATEADD(mm, DATEDIFF(mm,0,getdate()), 0))
------解决方案--------------------
第一个 >= 第二个 <

7月1号到12号数据
>= 2012-07-01 00:00:00
 < 2012-07-13 00:00:00
------解决方案--------------------
如果上月都是从一号开始算的话,就不需要传时间参数啊
因为你已经知道起止时间了,还有必要传入么?

除非你要求SP有通用性,不只是针对目前的需求
那就需要传时间参数
------解决方案--------------------
你的描述有问题哦,业务应该不是这样的,这样的报表中不应该有单价,而是只有月均单价,简单的说,如商品A,本月发生了2次采购,1次是数量10,单价5,一次是数量10,单价6,如果照你的描述来讲,最终这条商品在报表中会出现2条记录,这显然是不合理的。
------解决方案--------------------
探讨

引用:
如果上月都是从一号开始算的话,就不需要传时间参数啊
因为你已经知道起止时间了,还有必要传入么?

除非你要求SP有通用性,不只是针对目前的需求
那就需要传时间参数

客户选择时间范围!你总的有2个参数吧

------解决方案--------------------
探讨

引用:
如果上月都是从一号开始算的话,就不需要传时间参数啊
因为你已经知道起止时间了,还有必要传入么?

除非你要求SP有通用性,不只是针对目前的需求
那就需要传时间参数

客户选择时间范围!你总的有2个参数吧

------解决方案--------------------
存储过程简单的,主要是你的时间控制这一块,涉及到什么上月初或本月的,那么问一下,如果我输入的是开始时间:7.5 结束时间是7.8,那么是不是你需要查处7.5-7.8号之间的数据,还是需要转换成别的?或是仅仅需要输入一个月份而已?
  相关解决方案