以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]sql语句增加按日期分组(已解决)  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=10979)

--  作者:yyzlxc
--  发布时间:2011/7/2 14:39:00
--  [求助]sql语句增加按日期分组(已解决)
 

Dim sql As String = "Select 报表年月,日期,单位,加工费,投工 FROM {日报源表} WHERE Year(日期) = 2010"

Dim b As New CrossTableBuilder("统计表1",sql)

b.HGroups.AddDef("单位")

b.VGroups.AddDef("报表年月")

b.Totals.AddDef("加工费")

b.Totals.AddDef("投工",AggregateEnum.Average,"月均人数")

b.HorizontalTotal = True

b.VerticalTotal = True

b.Build()

MainTable = Tables("统计表1")

 

上述代码在命令窗口执行后,可以生成一统计表,需要在SELECT语句中添加按日期分组字段,如何添加,请各位老师指教。谢谢!

[此贴子已经被作者于2011-7-2 16:59:50编辑过]

--  作者:狐狸爸爸
--  发布时间:2011/7/2 14:55:00
--  

Dim sql As String = "Select 报表年月,日期,单位,加工费,投工 FROM {日报源表} WHERE Year(日期) = 2010"

Dim b As New CrossTableBuilder("统计表1",sql)

b.HGroups.AddDef("单位")
b.HGroups.AddDef("日期", "月")

b.VGroups.AddDef("报表年月")

b.Totals.AddDef("加工费")

b.Totals.AddDef("投工",AggregateEnum.Average,"月均人数")

b.HorizontalTotal = True

b.VerticalTotal = True

b.Build()

MainTable = Tables("统计表1")

 

可以看看CrossTableBuilder的说明:

http://help.foxtable.com/topics/0678.htm

 


--  作者:yyzlxc
--  发布时间:2011/7/2 15:09:00
--  

谢谢狐爸的回帖,但是我不是要增加月的列,而是因为源表中每个单位每天有几个项目的投工,我是要通过在SELECT语句中添加按日期分组字段,来获取每个单位每天的投工数,在月份汇总时才能得到正确的月平均人数。

 

附上文件:

 

 

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:生产日报b.zip


--  作者:狐狸爸爸
--  发布时间:2011/7/2 15:20:00
--  

Dim sql As String = "Select 报表年月,日期,单位,加工费,投工 FROM {日报源表} WHERE Year(日期) = 2010"

Dim b As New CrossTableBuilder("统计表1",sql)

b.HGroups.AddDef("单位")
b.HGroups.AddDef("日期", DateGroupEnum.None)

b.VGroups.AddDef("报表年月")

b.Totals.AddDef("加工费")

b.Totals.AddDef("投工",AggregateEnum.Average,"月均人数")

b.HorizontalTotal = True

b.VerticalTotal = True

b.Build()

MainTable = Tables("统计表1")


--  作者:yyzlxc
--  发布时间:2011/7/2 15:30:00
--  
谢谢狐爸的回复,但是不是我要的效果,我想通过此段代码,获得一张年度汇总表,只是需要在第一句代码的SELECT语句中添加一个按日期分组字段,如 GROUP BY day(日期)之类,我加上后运行出错,如何添加分组字段,请狐爸指教。谢谢!!
--  作者:狐狸爸爸
--  发布时间:2011/7/2 15:37:00
--  

group语句必须配合sum之类的聚合函数才能用的。

不知道你为啥要这么做?

统计直接用CrossTableBuilder或GroupTableBuilder,没有什么统计数据得不到的。

做个表,输入一点测试数据,然后传上来,说一下你需要的统计结果是什么。


--  作者:yyzlxc
--  发布时间:2011/7/2 16:06:00
--  

案例在三楼。

在共享窗口当月汇总生成的汇总表,其中月均人数需要先从当月日汇总的表里的全员人数列提取数据汇总而成,因为每个单位每天有几个项目的投工,需要每个单位每天的投工数,所以先要汇总每天的投工人数,然后用Average来得到月平均人数。

上述代码的目的:想通过

Dim sql As String = "Select 报表年月,日期,单位,加工费,投工 FROM {日报源表} WHERE Year(日期) = 2010"

Dim b As New CrossTableBuilder("统计表1",sql)

这两句代码能够生成类似按日汇总表(不可见),然后根据此表来生成类似月汇总表的年汇总表(可见)。这样的思路可行吗?还请狐爸老师指教。谢谢!!

 

月汇总:

 


图片点击可在新窗口打开查看此主题相关图片如下:bb.png
图片点击可在新窗口打开查看

 

 

年汇总:

  


图片点击可在新窗口打开查看此主题相关图片如下:aa.png
图片点击可在新窗口打开查看
[此贴子已经被作者于2011-7-2 16:07:46编辑过]

--  作者:yyzlxc
--  发布时间:2011/7/2 16:25:00
--  
    也就是说,在sql表中(看不见的表)投工数为该单位当日几个项目投工的总和,然后在交叉汇总时,用Average函数获得该单位的月平均人数。不知这样能否解释清楚。目的是为了减少一张日汇总表。
[此贴子已经被作者于2011-7-2 16:26:35编辑过]

--  作者:狐狸爸爸
--  发布时间:2011/7/2 16:50:00
--  
Dim sql As String = "Select 报表年月,日期,单位,Sum(加工费) As 加工费,Sum(投工) As 投工 FROM {日报源表} WHERE Year(日期) = 2010 Group By 报表年月,日期,单位"
--  作者:yyzlxc
--  发布时间:2011/7/2 16:59:00
--  
完全符合要求,谢谢狐爸老师,给狐爸老师添麻烦了,万分感谢!