Foxtable(狐表)用户栏目专家坐堂 → 重复行数据处理


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

主题:重复行数据处理

美女呀,离线,留言给我吧!
朱女士
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:445 积分:3633 威望:0 精华:0 注册:2020/2/8 11:14:00
重复行数据处理  发帖心情 Post By:2022/12/13 10:34:00 [只看该作者]

老师:您好!

图片点击可在新窗口打开查看此主题相关图片如下:8481fd9bbf3f2bee82a3c8c59eb3184.jpg
图片点击可在新窗口打开查看
 上表中,我有4行相同的标识(bs),相同的工序耗时,我想将这4行的重量加起来,取一行的工序耗时,按每一行的重量占总重量的比例,去分劈工序耗时,然后再逐行到实际耗时列中,我的代码就填充了一行。其余三行没填进去。请指教!谢谢!(其实:四行实际耗时:是7.73,7.05,4.09,13.65,表中就填了一个7.73)
Dim Nas As New List(Of String)
Dim l As Integer
For Each bbm As String In DataTables("实时工序计算表").GetValues("bs")
    l = bbm.Length
    If l = 18 Then
        nas.Add(bbm)
    End if
Next
Dim j As Integer
Dim dzl, gxhs, zzl As Double

For Each na As String In Nas
    Dim m As Integer = DataTables("实时工序计算表").Compute("count(bs)", "bs='" & na & "'")
    If m > 1 Then
        zzl = DataTables("实时工序计算表").Compute("sum(重量)", "bs='" & na & "'") 
    End If
    For j = 1 To m
        Dim dr As DataRow = DataTables("实时工序计算表").find("bs='" & na & "'")
        If dr IsNot Nothing Then
            gxhs = dr("工序耗时")
            dzl = dr("重量")
            dr("实际耗时") = dzl * gxhs / zzl
        End If
    Next
Next 

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107135 积分:544918 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/12/13 10:42:00 [只看该作者]

没看懂这个代码逻辑,麻烦解释一下每一行代码的意思

 回到顶部
美女呀,离线,留言给我吧!
朱女士
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:445 积分:3633 威望:0 精华:0 注册:2020/2/8 11:14:00
  发帖心情 Post By:2022/12/13 11:23:00 [只看该作者]

对不起,是我没说清楚!
我先将“实时工序计算表”里的“bs"列的不重复值放在:集合里Dim Nas As New List(Of String)

‘定义集合
Dim Nas As New List(Of String) 
Dim l As Integer
‘将实时工序计算表里的bs列不重复值长度为18的放在集合里
For Each bbm As String In DataTables("实时工序计算表").GetValues("bs")
    l = bbm.Length
判断bsl列的长度
    If l = 18 Then
        nas.Add(bbm)
    End if
Next
Dim j As Integer
Dim dzl, gxhs, zzl As Double
’遍历集合里的每一项
For Each na As String In Nas
  ‘计算实时工序计算表里bs重复的条数m
  Dim m As Integer = DataTables("实时工序计算表").Compute("count(bs)", "bs='" & na & "'")
’如果是多条,就把这个相同bs的m条的重量相加的和为:zzl
    If m > 1 Then
        zzl = DataTables("实时工序计算表").Compute("sum(重量)", "bs='" & na & "'") 
    End If
'下面取相同bs的单行工序耗时和重量取值,用重量比例加权重量,然后将m条数据逐条填入实际耗时列里,
    For j = 1 To m
        Dim dr As DataRow = DataTables("实时工序计算表").find("bs='" & na & "'")
        If dr IsNot Nothing Then

            gxhs = dr("工序耗时") ’取第一行的工序耗时和重量
            dzl = dr("重量")
       ’当前行的重量dzl,占总重量zzl的比例乘以当前行的工序耗时gxhs等于当前行的实际耗时。
            dr("实际耗时") = dzl * gxhs / zzl  
        End If
    Next
Next 


 

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107135 积分:544918 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/12/13 11:26:00 [只看该作者]


 回到顶部
美女呀,离线,留言给我吧!
朱女士
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:445 积分:3633 威望:0 精华:0 注册:2020/2/8 11:14:00
  发帖心情 Post By:2022/12/13 11:28:00 [只看该作者]

可能就是不会定位行,数据算出来了,就是不会定位填入数。

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107135 积分:544918 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/12/13 11:29:00 [只看该作者]


        for each dr As DataRow in DataTables("实时工序计算表").select("bs='" & na & "'")
            gxhs = dr("工序耗时") ’取第一行的工序耗时和重量
            dzl = dr("重量")
       ’当前行的重量dzl,占总重量zzl的比例乘以当前行的工序耗时gxhs等于当前行的实际耗时。
            dr("实际耗时") = dzl * gxhs / zzl  
    Next

 回到顶部