Foxtable(狐表)用户栏目专家坐堂 → 多人合作的统计表问题


  共有2813人关注过本帖树形打印复制链接

主题:多人合作的统计表问题

帅哥哟,离线,有人找我吗?
670163008
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:30 积分:309 威望:0 精华:0 注册:2020/3/16 14:20:00
多人合作的统计表问题  发帖心情 Post By:2020/7/8 23:03:00 [只看该作者]

这些项目都是多人完成的,但是嘉奖只奖励给管理层。如果一个项目有两个以上管理层,嘉奖平均分配。其他人参与了项目的,不参加分配嘉奖。

我举的例子中,曹操、刘备、孙权三人是管理层。

比如,

曹操和孙权参加的项目,嘉奖各一半。

曹操和陆逊参加的项目,嘉奖全部给曹操。

孙权、刘备和陆逊参加的项目,嘉奖给孙权和刘备各一半。

如何形成一个统计表,统计出曹操、刘备、孙权所得的嘉奖。

 下载信息  [文件大小:   下载次数: ]
点击浏览该文件:统计.table


 回到顶部
帅哥,在线噢!
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:105875 积分:538432 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By: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
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:30 积分:309 威望:0 精华:0 注册:2020/3/16 14:20:00
  发帖心情 Post By: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
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐神 帖子:4627 积分:33767 威望:0 精华:0 注册:2008/8/31 22:44:00
  发帖心情 Post By: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

 回到顶部
帅哥,在线噢!
有点蓝
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:105875 积分:538432 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By: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
……

 回到顶部