Foxtable(狐表)用户栏目专家坐堂 → 跨表筛选


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

主题:跨表筛选

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/1/8 11:55:00 [显示全部帖子]

Dim g As New CrossTableBuilder("统计表1", DataTables("随件卡"))
g.HGroups.AddDef("客户名称")
g.HGroups.AddDef("产品种类")
g.HGroups.AddDef("产品名称")
g.HGroups.AddDef("产品代码")
g.HGroups.AddDef("工序代码")
g.VGroups.AddDef("加工时间", "{0}月")
g.Totals.AddDef("计数数量", "产量")
g.Totals.AddDef("加工数量")
Dim dt As DataTable = g.Build(True)

Dim dict As new Dictionary(of String ,String)
For Each c As DataCol In dt.DataCols
    If c.name.Contains("_") Then
        dict.Add(c.Caption,c.Name)
    End If
Next


Dim yf() As String = {"","一","二","三","四","五","六","七","八","九","十","十一","十二"}
For Each dr As DataRow In dt.DataRows
    Dim filter As String = "1=1"
    If dr.Isnull("客户名称") Then
        filter &= " and 客户名称 is null"
    Else
        filter &= " and 客户名称 = '" & dr("客户名称") & "'"
    End If
    If dr.Isnull("产品种类") Then
        filter &= " and 产品种类 is null"
    Else
        filter &= " and 产品种类 = '" & dr("产品种类") & "'"
    End If
    If dr.Isnull("产品代码") Then
        filter &= " and 产品代码 is null"
    Else
        filter &= " and 产品代码 = '" & dr("产品代码") & "'"
    End If
    If dr.Isnull("工序代码") Then
        filter &= " and 工序代码 is null"
    Else
        filter &= " and 工序代码 = '" & dr("工序代码") & "'"
    End If
    If dr.Isnull("产品名称") Then
        filter &= " and 产品名称 is null"
    Else
        filter &= " and 产品名称 = '" & dr("产品名称") & "'"
    End If
    Dim ndr As DataRow = DataTables("产品表").Find(filter)
    If ndr Is Nothing Then
        ndr = DataTables("产品表").AddNew()
        ndr("客户名称") = dr("客户名称")
    End If
    For Each c As String In dict.Keys
        Dim str() As String = c.Split("_")
        If str(0) = "空" Then Continue For
        Dim yue As String = yf(val(str(0).trim("月"))) & "月分_"
        If str(1) = "产量" Then
            ndr(yue & str(1)) = dr(dict(c))
        Else
            ndr(yue & "合格率") = dr(dict(str(0) & "_产量")) / dr(dict(c))
        End If
    Next
Next


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/1/12 15:01:00 [显示全部帖子]

代码肯定没问题,请认认真真测试。你该一下红色的代码,看生成的数据是否正确。

 

Dim g As New CrossTableBuilder("统计表1", DataTables("随件卡"))
g.HGroups.AddDef("客户名称")
g.HGroups.AddDef("产品种类")
g.HGroups.AddDef("产品名称")
g.HGroups.AddDef("产品代码")
g.HGroups.AddDef("工序代码")
g.VGroups.AddDef("加工时间", "{0}月")
g.Totals.AddDef("计数数量", "产量")
g.Totals.AddDef("加工数量")
g.Build()

Dim dt As DataTable = DataTables("统计表1")
Dim dict As new Dictionary(of String ,String)
For Each c As DataCol In dt.DataCols
    If c.name.Contains("_") Then
        dict.Add(c.Caption,c.Name)
    End If
Next

Dim yf() As String = {"","一","二","三","四","五","六","七","八","九","十","十一","十二"}
For Each dr As DataRow In dt.DataRows
    Dim filter As String = "1=1"
    If dr.Isnull("客户名称") Then
        filter &= " and 客户名称 is null"
    Else
        filter &= " and 客户名称 = '" & dr("客户名称") & "'"
    End If
    If dr.Isnull("产品种类") Then
        filter &= " and 产品种类 is null"
    Else
        filter &= " and 产品种类 = '" & dr("产品种类") & "'"
    End If
    If dr.Isnull("产品代码") Then
        filter &= " and 产品代码 is null"
    Else
        filter &= " and 产品代码 = '" & dr("产品代码") & "'"
    End If
    If dr.Isnull("工序代码") Then
        filter &= " and 工序代码 is null"
    Else
        filter &= " and 工序代码 = '" & dr("工序代码") & "'"
    End If
    If dr.Isnull("产品名称") Then
        filter &= " and 产品名称 is null"
    Else
        filter &= " and 产品名称 = '" & dr("产品名称") & "'"
    End If
    Dim ndr As DataRow = DataTables("产品表").Find(filter)
    If ndr Is Nothing Then
        ndr = DataTables("产品表").AddNew()
        ndr("客户名称") = dr("客户名称")
    End If
    For Each c As String In dict.Keys
        Dim str() As String = c.Split("_")
        If str(0) = "空" Then Continue For
        Dim yue As String = yf(val(str(0).trim("月"))) & "月分_"
        If str(1) = "产量" Then
            ndr(yue & str(1)) = dr(dict(c))
        Else
            ndr(yue & "合格率") = dr(dict(str(0) & "_产量")) / dr(dict(c))
        End If
    Next
Next


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/1/12 16:48:00 [显示全部帖子]

去看统计表的数据

  


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

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/1/14 18:38:00 [显示全部帖子]

你统计比较哪几列?你代码写的是统计下面两列,如果你要计算合格率,你是不是要统计【合格】的数量?

 

g.Totals.AddDef("计数数量", "产量")
g.Totals.AddDef("加工数量")


 回到顶部