以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 多值字段与统计代码问题 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=125868) |
||||
-- 作者:ZJZK2018 -- 发布时间:2018/10/8 23:48:00 -- 多值字段与统计代码问题 需求是: 统计出每个“工号”相关的产品名称,如附件中:工号01对应的产品为PD001;工号02对应的产品为PD001,PD002;工号03对应的产品为PD001,PD002,PD003 下面代码如何调整: \'生成统计表的结构 Dim dt As DataTable Dim dtb As New DataTableBuilder("统计") dtb.AddDef("工号", Gettype(String), 160) dtb.AddDef("产品", Gettype(String), 160) dtb.AddDef("数量", Gettype(Double)) dt = dtb.Build() \'开始逐行累加统计 Dim lst As New Dictionary(of String ,DataRow) \'定义一个字典,用于检索每个员工在统计表中对应的行 Dim lt As New List(Of String) 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 dr2 As DataRow If lst.ContainsKey(nm) \'如果集合中包括此工号对应的行 dr2 = lst(nm) \'将此行赋值给变量dr2 Else dr2 = dt.AddNew() \'否则增加一行. dr2("工号") = nm \'新增行的工号列设置为此工号 lst.add(nm,dr2) \'将新增行添加到字典中,以便接下来检索 End If dr2("数量") = dr2("数量") + v \'加上平均后的产量 Next End If For Each dt1 As DataRow In dt.DataRows If dr1("员工工号").Contains(dt1("工号")) Then lt.Add(dr1("产品")) End If dt1("产品") = String.Join(",",lt.ToArray) Next Next MainTable = Tables("统计")
|
||||
-- 作者:y2287958 -- 发布时间:2018/10/9 8:23:00 -- 要得到什么结果? |
||||
-- 作者:有点甜 -- 发布时间:2018/10/9 8:36:00 -- \'生成统计表的结构
|