以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 多字段与统计问题 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=150509) |
||||
-- 作者:lgz518 -- 发布时间:2020/6/1 0:29:00 -- 多字段与统计问题 多值字段与统计 普通用户请忽略本节内容。 本节知识的一个要点是Dictionary,如果你对其已经生疏,请先温习一下。 假定有一个下图所示的产量登记表,其中员工工号列是多值字段: 现在需要统计每个员工加工的产品数量,同一个产品,如果有多个员工参与加工,那么产量平分。 显然这样的统计,用传统的统计工具是无法实现的,我们只能手工编码统计,不过代码也不算复杂: \'生成统计表的结构 在命令窗口执行上面的代码,即可得到如下统计结果: 如果要统计每个员工加工不同产品的数量,代码只需稍微调整一下: \'生成统计表的结构 问题:上面是帮助实例,它是用平均计算员工产量,但有时不能平均分,而按一定比例的分 1,不是平均分,如何按分配表的比例进行统计,“分配表”的字段有“员工工号,员工姓名,分配比例”? 2,如果不用跨表,分配表来取值,是直接在“产量登记”表的“员工工号”写明,如“员工工号”0002/50,0003/10,是工号/产量,这类方法计算? |
||||
-- 作者:sloyy -- 发布时间:2020/6/1 2:29:00 -- For Each dr1 As DataRow In DataTables("产量登记").DataRows If dr1.IsNull("员工工号") = False Then \'如果工号列不为空 Dim nms() As String = dr1("员工工号").Split(",") \'将工号列内容拆分成数组 \' Dim v As Double = dr1("数量") / nms.Length \'获得平均之后每个工号的生产数量 For Each nm As String In nms \'遍历参与加工此产品的每个工号
Dim dr3 As DataRow
dr3=datatables("分配表").find("员工工号=\'" & nm &"\'")
Dim dr2 As DataRow
Dim key As String = nm & "|" & dr1("产品") \'这里是关键,由工号和产品组成字典的关键词. If lst.ContainsKey(key) \'如果集合中包括此关键词对应的行 dr2= lst(key) \'将此行赋值给变量dr2 Else dr2 = dt.AddNew() \'否则增加一行. dr2("工号") = nm \'新增行的工号列设置为此工号 dr2("产品") = dr1("产品") \'设置增行的产品 lst.add(key,dr2) \'将新增行添加到字典中,以便接下来检索 End If dr2("数量") = dr2("数量") +dr1("数量")*dr3("分配比例") \'加上每个工号的生产数量 Next End If Next |
||||
-- 作者:lgz518 -- 发布时间:2020/6/1 17:15:00 -- 如何用工号/产量,实现计算,员工产量? 在“产量登记”表的“员工工号”写明,“员工工号”0002/50,0003/10,是工号/产量,
|
||||
-- 作者:有点蓝 -- 发布时间:2020/6/1 17:22:00 -- 请上传实例说明问题 |
||||
-- 作者:lgz518 -- 发布时间:2020/6/1 18:24:00 --
|
||||
-- 作者:有点蓝 -- 发布时间:2020/6/1 20:14:00 -- 需要怎么计算,得到什么结果?手工填写结果截图看看 |
||||
-- 作者:lgz518 -- 发布时间:2020/6/2 10:48:00 -- 不是平均统计和跨表比配统计,是当前的表,员工工号字段的员工工号和数量计算员工的产量,如下图 |
||||
-- 作者:有点蓝 -- 发布时间:2020/6/2 11:21:00 --
|