以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- 非自然月的统计 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=68303) |
-- 作者:狐狸爸爸 -- 发布时间:2015/5/14 14:27:00 -- 非自然月的统计 部分企业在统计数据的时候,并不使用自然月,例如有的从上月的26日到本月的25日算做一个月,如何完成种非自然月的统计呢? 我们下面介绍两个两个方法。
增加一个统计日期列
我们可以在表中再增加一个统计日期列,然后将表的DataColChanged事件代码设置为:
Select
Case
e.DataCol.name
之后我们根据这个新增加的统计日期列进行统计即可。
利用自定义表达式
如果使用SQLGroupTableBuilder或SQLCrossTableBuilder进行统计,那么我们无需增加额外一列,可以直接用自定义表达式作为分组,实现非自然月的统计,例如:
Dim
b
As
New
SQLGroupTableBuilder("统计表1","订单")
上述代码利用表达式,如果如果是25日之后的日期,则将此日期增加6天,使其成为下个月的日期,然后再取年月参与统计。
需要注意的是,SQL Server的数据源并不支持iif函数,需要用Case When语句代替,此外DateAdd的第一个参数也不需要用单引号括起来,所以代码需要改为:
Dim
b
As
New
SQLGroupTableBuilder("统计表1","订单")
关于Access和SQL Server的语法和函数差异,我们的《SQL相关》这一章,有较为详细的介绍。 [此贴子已经被作者于2015/5/14 14:30:09编辑过]
|
-- 作者:Bin -- 发布时间:2015/5/14 14:29:00 -- ![]() |
-- 作者:yinyb36 -- 发布时间:2015/5/14 19:35:00 -- 顶,可以参考一下,还有种情况,截止日期不固定,如:正常情况下,提前两个工作日截止,如果提前截止,另行通知 |
-- 作者:lsy -- 发布时间:2015/5/31 15:10:00 -- 不能漏掉,顶上,收藏。 |
-- 作者:zqxzhs -- 发布时间:2016/4/24 8:01:00 -- 老师,“如果如果是25日之后的日期,则将此日期增加6天,使其成为下个月的日期,然后再取年月参与统计”这与2月份、30天、31天的月,是不是取得月会有问题呢? |
-- 作者:Hyphen -- 发布时间:2016/4/24 11:37:00 -- 不会有问题,仅仅是使得时间处于下个月而已,用来获取年和月。不是获取天数 |
-- 作者:zqxzhs -- 发布时间:2016/4/24 17:30:00 -- 获取年没问题,二月是不是有问题呀,25+6=31号,月不是就是当月了,遇到一个月30天时,31号是次月的1日,月就是当月加1了,对不同的月份来讲,获得的月是不是不同呢。 |
-- 作者:大红袍 -- 发布时间:2016/4/24 17:50:00 -- 代码没问题啊,大于25号,就是26等等以上的数字了,那么加上6天,怎么也是到了下一个月了吧?然后获取月份,都是正确的啊。 |