以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 多人合作的统计表问题 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=152099) |
||||
-- 作者:670163008 -- 发布时间:2020/7/8 23:03:00 -- 多人合作的统计表问题 这些项目都是多人完成的,但是嘉奖只奖励给管理层。如果一个项目有两个以上管理层,嘉奖平均分配。其他人参与了项目的,不参加分配嘉奖。 我举的例子中,曹操、刘备、孙权三人是管理层。 比如, 曹操和孙权参加的项目,嘉奖各一半。 曹操和陆逊参加的项目,嘉奖全部给曹操。 孙权、刘备和陆逊参加的项目,嘉奖给孙权和刘备各一半。 如何形成一个统计表,统计出曹操、刘备、孙权所得的嘉奖。 |
||||
-- 作者:有点蓝 -- 发布时间:2020/7/9 9:07:00 -- 和这里的用法基本差不多的http://foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=147418&skin=0 Dim dtb As New DataTableBuilder("统计") dtb.AddDef("姓名", Gettype(String), 32) dtb.AddDef("嘉奖", Gettype(Double)) dtb.Build() Dim lst As new List(of String) lst.AddRange({"曹操","刘备","孙权"}) Dim dict As new Dictionary(of String,Double) Dim lst2 As new List(of String) \'记录其中是管理层的人 For Each r As Row In Tables("表A").Rows For Each s As String In r("姓名").split(",") If lst.Contains(s) Then lst2.Add(s) Next Dim fy As Double = r("嘉奖") / lst2.Count \'按管理层人数平分 For Each s As String In lst2 If dict.ContainsKey(s) Then dict(s) = dict(s) + fy Else dict.Add(s,fy) End If Next Next Dim dr,d2 As DataRow For Each key As String In dict.Keys dr = DataTables("统计").AddNew dr("姓名") = key dr("嘉奖") = dict(key) Next |
||||
-- 作者:670163008 -- 发布时间:2020/7/9 12:19:00 -- 算出来的结果不对啊 原表格 刘备,关羽,张飞 6000 曹操,曹仁 5000 孙权,刘备,陆逊 6000 曹操,刘备 6000 刘备,曹操,孙权 7000 曹操,陆逊 6000
算出的表格 刘备 20011.1111 曹操 10733.3333 孙权 5255.5555
实际应该是 刘备 14333.333 曹操 16333.333 孙权 5333.333 |
||||
-- 作者:y2287958 -- 发布时间:2020/7/9 12:54:00 -- Dim dic As new Dictionary(of String,Double) Dim vs1() As String = "刘备,曹操,孙权".Split(",") For Each dr As DataRow In DataTables("表A").DataRows Dim vs2() As String = dr("姓名").Split(",") For Each s As String In vs1.Intersect(vs2) Dim i As Double = dr("嘉奖")/vs1.Intersect(vs2).count If dic.ContainsKey(s) Then dic(s) += i Else dic.Add(s,i) Next Next For Each k As String In dic.Keys \'显示所有键及其对应的值 Output.Show(K & ":" & dic(k)) Next
|
||||
-- 作者:有点蓝 -- 发布时间:2020/7/9 13:58:00 -- …… Dim dict As new Dictionary(of String,Double) Dim lst2 As new List(of String) \'记录其中是管理层的人 For Each r As Row In Tables("表A").Rows lst2.Clear For Each s As String In r("姓名").split(",") If lst.Contains(s) Then lst2.Add(s) Next …… |