以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  SQLGroupTableBuilder如何筛选?  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=114234)

--  作者:lur320
--  发布时间:2018/2/1 11:51:00
--  SQLGroupTableBuilder如何筛选?
如下代码,红字部门是错误的。


Dim sg As New SQLGroupTableBuilder("统计表1","masterlist_cip")
sg.Co  nne  cti
sg.filter="stage=\'assigned\' or stage=\'Closed\' or stage=\'Rejected by ActionOwner\'"
sg.AddTable("masterlist_cip","advisor","masterdata","name_of_user")
sg.groups.AddDef("Dateofrisen",DateGroupEnum.quarter,"Quarter")
sg.Groups.AddDef("dept_of_user","Dept")

sg.Totals.AddDef("problem",AggregateEnum.count,"Idears")
sg.Totals.AddExp("name_of_user","Case When dept_of_user = [Dept] Then dept_of_user End","Headcount",AggregateEnum.count)
sg.build
MainTable = Tables("统计表1")

我希望能做出如下数量,怎么做?
季度 部门 数量 人员 人均
1 A 123 5 24.6
1 B 4 3 1.3
2 A 43 5 8.6
2 B 54 3 18
3 A 21 5 4.2
3 B 32 3 10.6
4 A 35 5 7
4 B 542 3 180
季度和部门两列已经OK,然后查询统计数量也OK,但是如何做出筛选出对应的A部门的人数?因为我要算人均。

123的数量可能是5个人中的1个人贡献的,但是我需要的是与部门总人数进行算平均。

是否可以在SQLGroupTableBuilder一次性做出?



[此贴子已经被作者于2018/2/1 11:53:29编辑过]

--  作者:有点甜
--  发布时间:2018/2/1 12:01:00
--  

不需要判断吧?直接统计人员count、平均avg即可。

 

如果你是需要去重复的话,那就不能直接统计了,需要生成表格以后,再计算不重复人数、平均数


--  作者:lur320
--  发布时间:2018/2/1 12:12:00
--  
不行,这样子就会在部门列筛出了发过数量的员工,而不是部门总人数。
--  作者:有点甜
--  发布时间:2018/2/1 12:14:00
--  
以下是引用lur320在2018/2/1 12:12:00的发言:
不行,这样子就会在部门列筛出了发过数量的员工,而不是部门总人数。

 

生成表后,循环每一行,计算不重复人数,和平均数

 

http://www.foxtable.com/webhelp/scr/2747.htm

 


--  作者:lur320
--  发布时间:2018/2/1 12:17:00
--  
这样我会做了,但是如何填入临时生成的统计表1?我找了没找到插入列的方法。
--  作者:有点甜
--  发布时间:2018/2/1 12:31:00
--  
以下是引用lur320在2018/2/1 12:17:00的发言:
这样我会做了,但是如何填入临时生成的统计表1?我找了没找到插入列的方法。

 

build之后生成统计表1,然后循环统计表1每一行,查找对应的部门信息值,填入

 

for each r as row in tables("统计表1").rows

 

next


--  作者:lur320
--  发布时间:2018/2/1 12:42:00
--  
good,先随便塞一些数据,创建2个列,然后把数据覆盖掉。
--  作者:lur320
--  发布时间:2018/2/1 12:56:00
--  
不过又有问题了,覆盖数据后,平均值的列只有0和1,估计是数据格式的问题。如何解决?
是否是由于数量列原先是count,
然后平均值是小数,只显示整数部分?
季度 部门 数量 人员
1 Engineering 1 8
1 Operations 3 3
4 Production-OT 3 3
4 Quality 19 30
季度 部门 数量 人员
1 Engineering 0 8
1 Operations 1 3
4 Production-OT 1 3
4 Quality 1 30
[此贴子已经被作者于2018/2/1 12:56:56编辑过]

--  作者:lur320
--  发布时间:2018/2/1 12:59:00
--  
DataTables("统计表1").DataCols("Idears").SetFormat("0.00")

For Each r As Row In Tables("统计表1").rows
r("Idears")=CInt(r("Idears"))/CInt(r("TEMP1"))
我修改了列的格式还是不对
季度 部门 数量 人员
1 Engineering 0.00 8
1 Operations 1.00 3
4 Production-OT 1.00 3
4 Quality 1.00 30
[此贴子已经被作者于2018/2/1 13:00:01编辑过]

--  作者:lur320
--  发布时间:2018/2/1 13:13:00
--  
搞定

Dim sg As New SQLGroupTableBuilder("统计表1","masterlist_cip")
sg.Connn
sg.filter="stage=\'assigned\' or stage=\'Closed\' or stage=\'Rejected by ActionOwner\'"
sg.AddTable("masterlist_cip","advisor","masterdata","name_of_user")
sg.groups.AddDef("Dateofrisen",DateGroupEnum.quarter,"Quarter")
sg.Groups.AddDef("dept_of_user","Dept")

sg.Totals.AddDef("problem",AggregateEnum.count,"Idears")
sg.Totals.AddDef("dept_of_user",AggregateEnum.count,"TEMP1")
sg.build
MainTable = Tables("统计表1")
For Each r As Row In Tables("统计表1").rows
r("TEMP1")=DataTables("masterdata").Compute("count(name_of_user)","dept_of_user=\'" & r("Dept") & "\'")
Next
DataTables("统计表1").DataCols.Add("Avg",Gettype(Single))

For Each r As Row In Tables("统计表1").rows

r("Avg")=val(r("Idears"))/val(r("TEMP1"))

Next