我现在做一个仓库的每月报表,就是要统计某个时间段里的出入明细帐那些属于入库?总量有多少?
SQL语句余下:
update yuejie set yuejie.zcrk11=cryd.fx from yuejie,(select liaohao,banbenhao,sum( churushuliang)as fx from cryd where datediff(m, churushijian,getdate())<=1 and churuleixing in ('验收入库','制令入库')group by liaohao,banbenhao) as cryd where yuejie.liaohao=cryd.liaohao and yuejie.banbenhao=cryd.banbenhao
现在问题在这,当我11月25日23点整执行上面这条语句,理论上应该只选取从10月25日23点整~11月25日23点整参与计算,但实际上2008-10-21 18:34:00 的出入明细也参与计算了,我查了日历10月有31日,11月只有30日,我怀疑我的时间函数是否有问题,datediff(m, churushijian,getdate())<=1 (churushijian是我的出入明细帐的时间字段) 还有一个问题,当我把上面的那条SQL语句里的时间函数改为:datediff(d, churushijian,getdate())<=30的时候,并执行,select liaohao,banbenhao,sum( churushuliang)as fx from cryd where datediff(m, churushijian,getdate())<=1 and churuleixing in ('验收入库','制令入库')group by liaohao,banbenhao
结果2008-10-21 18:34:00 的出入明细没有参与计算了;
但我执行整条SQL语句: update yuejie set yuejie.zcrk11=cryd.fx from yuejie,(select liaohao,banbenhao,sum( churushuliang)as fx from cryd where [color=#99CC00]datediff(d, churushijian,getdate())<=30 and churuleixing in ('验收入库','制令入库')group by liaohao,banbenhao[/color]) as cryd where yuejie.liaohao=cryd.liaohao and yuejie.banbenhao=cryd.banbenhao
还是把2008-10-21 18:34:00 的出入明细参与计算了,我不知道是什么原因,感觉都不按常规出牌,怪怪的!!!
请高手帮我分析一下?我的数据库是SQL SERVER 2000
SQL语句余下:
update yuejie set yuejie.zcrk11=cryd.fx from yuejie,(select liaohao,banbenhao,sum( churushuliang)as fx from cryd where datediff(m, churushijian,getdate())<=1 and churuleixing in ('验收入库','制令入库')group by liaohao,banbenhao) as cryd where yuejie.liaohao=cryd.liaohao and yuejie.banbenhao=cryd.banbenhao
现在问题在这,当我11月25日23点整执行上面这条语句,理论上应该只选取从10月25日23点整~11月25日23点整参与计算,但实际上2008-10-21 18:34:00 的出入明细也参与计算了,我查了日历10月有31日,11月只有30日,我怀疑我的时间函数是否有问题,datediff(m, churushijian,getdate())<=1 (churushijian是我的出入明细帐的时间字段) 还有一个问题,当我把上面的那条SQL语句里的时间函数改为:datediff(d, churushijian,getdate())<=30的时候,并执行,select liaohao,banbenhao,sum( churushuliang)as fx from cryd where datediff(m, churushijian,getdate())<=1 and churuleixing in ('验收入库','制令入库')group by liaohao,banbenhao
结果2008-10-21 18:34:00 的出入明细没有参与计算了;
但我执行整条SQL语句: update yuejie set yuejie.zcrk11=cryd.fx from yuejie,(select liaohao,banbenhao,sum( churushuliang)as fx from cryd where [color=#99CC00]datediff(d, churushijian,getdate())<=30 and churuleixing in ('验收入库','制令入库')group by liaohao,banbenhao[/color]) as cryd where yuejie.liaohao=cryd.liaohao and yuejie.banbenhao=cryd.banbenhao
还是把2008-10-21 18:34:00 的出入明细参与计算了,我不知道是什么原因,感觉都不按常规出牌,怪怪的!!!
请高手帮我分析一下?我的数据库是SQL SERVER 2000
你改下格式看看
where datediff(m, churushijian,getdate()) <=1
---->改成下面的试试
where churushijian between dateadd(m, -1, getdate()) and getdate()
---->改成下面的试试
where churushijian between '2008-10-25 23:00:00' and '2008-11-25 23:00:00' --10.25 到11.25之间的数据会参与计算
---->改成下面的试试
where churushijian between dateadd(m, -1, getdate()) and getdate() 确实是正确的
但你能说明where datediff(m, churushijian,getdate()) <=1跟where churushijian between dateadd(m, -1, getdate()) and getdate()有什么实质区别吗?
select liaohao,banbenhao,sum( churushuliang)as fx from cryd where datediff(m, churushijian,getdate()) <=1 and churuleixing in ('验收入库','制令入库')group by liaohao,banbenhao
结果2008-10-21 18:34:00 的出入明细没有参与计算了;
但我执行整条SQL语句: update yuejie set yuejie.zcrk11=cryd.fx from yuejie,(select liaohao,banbenhao,sum( churushuliang)as fx from cryd where datediff(d, churushijian,getdate()) <=30 and churuleixing in ('验收入库','制令入库')group by liaohao,banbenhao) as cryd where yuejie.liaohao=cryd.liaohao and yuejie.banbenhao=cryd.banbenhao
还是把2008-10-21 18:34:00 的出入明细参与计算了,我不知道是什么原因,感觉都不按常规出牌,怪怪的!!!
请高手帮我分析一下?我的数据库是SQL SERVER 2000
如果最前面的参数用m,那么就是只按照月份做比较,如果当前是11月,那么你的语句就会把10月、11月以及11以后的所有数据都满足条件。
如果最前面的参数用d,那么就是按照天做比较,如果当前是2008-11-26,那么你的语句就会把2008-10-27号及以后的所有数据都满足条件。
还有一个问题,当我把上面的那条SQL语句里的时间函数改为:datediff(d, churushijian,getdate()) <=30的时候,并执行,select liaohao,banbenhao,sum( churushuliang)as fx from cryd where datediff(m, churushijian,getdate()) <=1 and churuleixing in ('验收入库','制令入库')group by liaohao,banbenhao
结果2008-10-21 18:34:00 的出入明细没有参与计算了; ------------------
按照修改后的执行(红色的),2008-10-21的出入明细不会参与计算,因为2008-10-21与2008-11-25相差35天。
(同样,2008-10-18的出入明细也不会参与计算)
还是把2008-10-21 18:34:00 的出入明细参与计算了,我不知道是什么原因,感觉都不按常规出牌,怪怪的!!! --------------
如果执行的时候,服务器时间是2008-11-25,则2008-10-21肯定不会参与计算。