以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  统计问题-1  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=186991)

--  作者:lin98
--  发布时间:2023/6/13 10:20:00
--  统计问题-1
Dim dt As DataTable
Dim dtb As New DataTableBuilder("统计")
dtb.AddDef("日期", Gettype( Date))
dtb.AddDef("工号", Gettype(String), 16)
dtb.AddDef("产品", Gettype(String), 16)
dtb.AddDef("数量", Gettype(Double))
dtb.AddDef("产量", Gettype(Double))
dt = dtb.Build()

Dim lst As New Dictionary(of String ,DataRow) \'
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
            Dim key As String = nm & "|" & dr1("产品") \'
            If lst.ContainsKey(key) \'
                dr2= lst(key) \'
            Else
                dr2 = dt.AddNew() \'
                
                dr2("工号") = nm \'
                dr2("产品") = dr1
                lst.add(key,dr2) \'
            End If
        dr2("数量") = dr2("数量") + v \'
        Next
    End If
Next
MainTable = Tables("统计")
如何实现表二的效果?

[此贴子已经被作者于2023/6/13 16:54:15编辑过]

--  作者:有点蓝
--  发布时间:2023/6/13 10:27:00
--  
就是1楼的代码,有什么问题?
--  作者:lin98
--  发布时间:2023/6/13 10:44:00
--  
.NET Framework 版本:4.0.30319.42000
Foxtable 版本:2022.8.18.1
错误所在事件:窗口,统计,Button5,Click
详细错误信息:
从类型“DataRow”到类型“String”的转换无效。

图片点击可在新窗口打开查看此主题相关图片如下:多值统计错结果.jpg
图片点击可在新窗口打开查看



--  作者:有点蓝
--  发布时间:2023/6/13 10:47:00
--  
            Else
                dr2 = dt.AddNew() \'
                
                dr2("工号") = nm \'
                dr2("产品") = dr1("产品")
                lst.add(key,dr2) \'
            End If

--  作者:lin98
--  发布时间:2023/6/13 11:18:00
--  
日期、产量、完成数没数据,第一个产品原表数据800,计算平均后应是各400,需计算超如图

图片点击可在新窗口打开查看此主题相关图片如下:多值结果错-2.jpg
图片点击可在新窗口打开查看


--  作者:有点蓝
--  发布时间:2023/6/13 11:36:00
--  
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
            Dim key As String = nm & "|" & dr1("产品") \'
            If lst.ContainsKey(key) \'
                dr2= lst(key) \'
            Else
                dr2 = dt.AddNew() \'
                dr2("数量") = v \'
                dr2("工号") = nm \'
                dr2("产品") = dr1
                lst.add(key,dr2) \'
            End If
        
        Next
    End If
Next
[此贴子已经被作者于2023/6/13 11:37:16编辑过]

--  作者:lin98
--  发布时间:2023/6/13 12:43:00
--  
Dim dt As DataTable
Dim dtb As New DataTableBuilder("统计")
dtb.AddDef("日期", GetType( Date))
dtb.AddDef("工号", GetType(String), 16)
dtb.AddDef("产品", GetType(String), 16)
dtb.AddDef("数量", GetType(Double))
dtb.AddDef("产量", GetType(Double))
dtb.AddDef("完成数", GetType(Double))
dt = dtb.Build()

Dim lst As New Dictionary(Of String , DataRow) \'

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
            Dim key As String = nm & "|" & dr1("产品") \'
            If lst.ContainsKey(key)  Then\'
                dr2 = lst(key) \'
            Else
                dr2 = dt.AddNew() \'
                dr2("数量") = v \'
                dr2("工号") = nm \'
                dr2("产品") = dr1
                lst.add(key, dr2) \'
            End If
        
        Next
    End If
Next

MainTable = Tables("统计")

.NET Framework 版本:4.0.30319.42000
Foxtable 版本:2022.8.18.1
错误所在事件:窗口,统计,Button5,Click
详细错误信息:
从类型“DataRow”到类型“String”的转换无效。
[此贴子已经被作者于2023/6/13 12:43:32编辑过]

--  作者:有点蓝
--  发布时间:2023/6/13 13:28:00
--  
看4楼
--  作者:lin98
--  发布时间:2023/6/13 14:35:00
--  


数据不完整,如图
[此贴子已经被作者于2023/6/13 16:54:38编辑过]

--  作者:有点蓝
--  发布时间:2023/6/13 14:38:00
--  
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 = dt.AddNew() \'
                dr2("数量") = v \'
                dr2("工号") = nm \'
                dr2("产品") = dr1("产品")
        Next
    End If
Next