Foxtable(狐表)用户栏目专家坐堂 → [求助]统计


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

主题:[求助]统计

帅哥哟,离线,有人找我吗?
江南小镇
  11楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1712 积分:11426 威望:0 精华:0 注册:2015/6/22 8:11:00
  发帖心情 Post By:2022/2/11 12:35:00 [只看该作者]

老师好,下面代码标出的计算结果不正确。


Select Case e.DataCol.Name
    Case "姓名","购piao金额","中奖金额","付款金额"
        Dim drs As List(of DataRow)
        Dim Filter As String
        Filter = "[_Identify] >= " & e.DataRow("_Identify") & " And [姓名] = '" & e.DataRow("姓名") & "'"
        drs = e.DataTable.Select(Filter)
        
        For i As Integer = 0 To drs.Count - 1
            Dim dr = drs(i)
            If i = drs.Count - 1 Then
                Filter = "[_Identify] <= " & dr("_Identify") & " And [姓名] = '" & dr("姓名") & "'"
                Dim Val1 As Double = e.DataTable.Compute("Sum(购piao金额)",Filter)
                Dim Val2 As Double = e.DataTable.Compute("Sum(中奖金额)",Filter)
                Dim Val3 As Double = e.DataTable.Compute("Sum(付款金额)",Filter)
                
                dr("累计_购piao") = Val1
                dr("累计_中奖") = Val2
                dr("累计_付款") = Val3
            Else
                dr("累计_购piao") = Nothing
                dr("累计_中奖") = Nothing
                dr("累计_付款") = Nothing
            End If
        Next
        If e.DataCol.Name = "姓名" AndAlso e.OldValue IsNot Nothing AndAlso e.OldValue <> e.NewValue Then
            Filter = "[_Identify] > " & e.DataRow("_Identify") & " And [姓名] = '" & e.OldValue & "'"
            drs = e.DataTable.Select(Filter)
            For i As Integer = 0 To drs.Count - 1
                Dim dr = drs(i)
                If i = drs.Count - 1 Then
                    Filter = "[_Identify] <= " & dr("_Identify") & " And [姓名] = '" & dr("姓名") & "'"
                    Dim Val1 As Double = e.DataTable.Compute("Sum(购piao金额)",Filter)
                    Dim Val2 As Double = e.DataTable.Compute("Sum(中奖金额)",Filter)
                    Dim Val3 As Double = e.DataTable.Compute("Sum(付款金额)",Filter)
                    dr() = Val1
                    dr("累计_购piao") = Val2
                    dr("累计_中奖") = Val2
                    dr("累计_付款") = Val3
                Else
                    dr("累计_购piao") = Nothing
                    dr("累计_中奖") = Nothing
                    dr("累计_付款") = Nothing
                End If
            Next
        End If
        Dim dr2 As DataRow = e.DataTable.Find("姓名 is not null","[_Identify] desc")
        Dim V1 = e.DataTable.Compute("Sum(累计_购piao)","累计_购piao > 0")
        Dim V2 = e.DataTable.Compute("Sum(累计_中奖)","累计_中奖 > 0")
        Dim V3 = e.DataTable.Compute("Sum(累计_付款)","累计_付款 > 0")
        
        e.DataTable.ReplaceFor("累计_结欠", Nothing)
        dr2("累计_结欠") = V1 - V2 - V3
End Select

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


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

举例具体数据说明一下,什么地方计算不正确

 回到顶部
帅哥哟,离线,有人找我吗?
江南小镇
  13楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1712 积分:11426 威望:0 精华:0 注册:2015/6/22 8:11:00
  发帖心情 Post By:2022/2/11 14:02:00 [只看该作者]


图片点击可在新窗口打开查看此主题相关图片如下:表.png
图片点击可在新窗口打开查看

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


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

这种按照购piao日期排序的应该使用购piao日期作为比较条件,而不是使用_Identify,这2个列的顺序未必一致。

另外累计_结欠的计算使用累计值进行再统计肯定是不正确的,应该像前面一样对3个金额列进行统计。如果最后一行的前3个累计列的值已经计算好,累计_结欠直接使用前3个累计列的值计算即可,没有必要再去统计。

 回到顶部
总数 14 上一页 1 2