Foxtable(狐表)用户栏目专家坐堂 → 合并后汇总的代码疑问


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

主题:合并后汇总的代码疑问

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


加好友 发短信
等级:四尾狐 帖子:928 积分:7769 威望:0 精华:13 注册:2008/9/1 11:58:00
合并后汇总的代码疑问  发帖心情 Post By:2011/1/11 16:30:00 [显示全部帖子]

合并后统计的代码如下,为何不是完全合并呢,请看图片的部门为什么有不完全合并的情况呢,第二列的0148就是部门代码?
图片点击可在新窗口打开查看此主题相关图片如下:screenshot.jpg
图片点击可在新窗口打开查看

'以下为合并后统计结果显示代码
With Tables("sos")
    .MergeMode = MergeModeEnum.Standard
    .MergeCols.Clear()
    .MergeCols.Add("排产日期")
    .MergeCols.Add("部门")
    .MergeCols.Add("班组")
    .MergeCols.Add("订单编号")
    .MergeSort = "排产日期,部门,班组,订单编号"
    .AllowMerge = True
End With
Dim t As Table = Tables("sos")
Dim g As Subtotalgroup
t.SubtotalGroups.Clear()
t.GroupAboveData = False
t.TreeVisible = False
g = New Subtotalgroup
g.Aggregate = AggregateEnum.Sum
g.GroupOn = "排产日期"
g.DateGroup = DateGroupEnum.day
g.Caption = "{0}"
t.SubtotalGroups.Add(g)
t.Subtotal()
Dim r As Row
Dim r1 As Row
For i As Integer = 1 To t.Rows.Count(True) - 1
    r = t.Rows(i,True)
    r1 = t.Rows(i-1,True)
    If r.IsGroup '如果是分组行
        Dim f As String = "排产日期 = #" & r1("排产日期") & "#"
        Dim x1 As String = "排产日期 = #" & r1("排产日期") & "# and 大类 = '分类一'"
        Dim x2 As String = "排产日期 = #" & r1("排产日期") & "# and 大类 = '分类二'"
        Dim x3 As String = "排产日期 = #" & r1("排产日期") & "# and 大类 = '分类三'"
        Dim x4 As String = "排产日期 = #" & r1("排产日期") & "# and 大类 = ''分类四"
        Dim x5 As String = "排产日期 = #" & r1("排产日期") & "# and 大类 = ''分类五"
        Dim x6 As String = "排产日期 = #" & r1("排产日期") & "# and 大类 = ''分类六"
        Dim v As String =  "销售金额:" & t.Compute("Sum(销售)",f)
        v = v & " /产值:" & t.Compute("Sum(产值)",f)
        v = v & "/分类一:" & t.Compute("Sum(约当量)",x1)
        v = v & "/分类二:" & t.Compute("Sum(约当量)",x2)
        v = v & "/分类三:" & t.Compute("Sum(约当量)",x3)
        v = v & "/分类四:" & t.Compute("Sum(约当量)",x4)
        v = v & "/分类无:" & t.Compute("Sum(约当量)",x5)
        v = v & "/分类六:" & t.Compute("Sum(约当量)",x6)
        r("排产日期") = format(r1("排产日期"),"yyyy年MM月dd日") & "排产信息提示:" & v
        Tables("sos").AutoSizeRow(i)
    End If
Next

[此贴子已经被作者于2011-1-11 16:35:05编辑过]

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


加好友 发短信
等级:四尾狐 帖子:928 积分:7769 威望:0 精华:13 注册:2008/9/1 11:58:00
合并后汇总的代码疑问  发帖心情 Post By:2011/1/11 16:57:00 [显示全部帖子]

如何更改

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


加好友 发短信
等级:四尾狐 帖子:928 积分:7769 威望:0 精华:13 注册:2008/9/1 11:58:00
合并后汇总的代码疑问  发帖心情 Post By:2011/1/11 17:14:00 [显示全部帖子]

老大有无方法达到要求

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


加好友 发短信
等级:四尾狐 帖子:928 积分:7769 威望:0 精华:13 注册:2008/9/1 11:58:00
合并后汇总的代码疑问  发帖心情 Post By:2011/1/12 13:46:00 [显示全部帖子]

老大,这个问题跟这个是一个例子:
http://www.foxtable.com/dispbbs.asp?boardid=2&Id=8941&page=2

 回到顶部
帅哥哟,离线,有人找我吗?
唐尸三摆手
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:928 积分:7769 威望:0 精华:13 注册:2008/9/1 11:58:00
合并后汇总的代码疑问  发帖心情 Post By:2011/1/12 16:24:00 [显示全部帖子]

高手们请不吝赐教

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


加好友 发短信
等级:四尾狐 帖子:928 积分:7769 威望:0 精华:13 注册:2008/9/1 11:58:00
合并后汇总的代码疑问  发帖心情 Post By:2011/1/12 18:38:00 [显示全部帖子]

t.Subtotal(True)黑体部分的作用还真是玄妙

不过老大能解释一下这里的true代表什么含义吗?
[此贴子已经被作者于2011-1-12 18:43:43编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
唐尸三摆手
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:928 积分:7769 威望:0 精华:13 注册:2008/9/1 11:58:00
合并后汇总的代码疑问  发帖心情 Post By:2011/1/12 18:59:00 [显示全部帖子]

新的问题出来了:
将红色代码按照老大的要求更正,加个TRUE:



DataTables("sos").StopRedraw
DataTables("sos").DataRows.Clear()
Dim cmd As New SQLCommand
Dim dt As DataTable
Dim sCols() As String = {"排产日期","部门","班组","订单编号","产品编码","产品名称","排产数量","颜色","商标","分类编码","单价","计划号"}
Dim dCols() As String = {"排产日期","部门","班组","订单编号","产品编码","产品名称","排产数量","颜色","商标","分类编码","单价","计划号"}
cmd.C
cmd.CommandText = "select distinct a.planid as '计划号',CONVERT(VARCHAR(30),a.requiredate,23) as '排产日期',a.requiresumcontractno as'订单编号',a.itemcode as'产品编码',b.name as'产品名称',a.plannum as'排产数量',a.color As '颜色',a.remark as '商标',b.classcode as '分类编码',c.deptcode as'部门',d.workcentercode as '班组',g.rate_exchange * f.price_taxfree as '单价' from ((((aec00000 a join aaa00000 b on a.itemcode=b.code And a.centercode='0100' and (a.requiredate between '2011-02-01' and '2011-02-28')) left join abb00000 c on a.itemcode=c.itemcode)left join abc00000 d on a.itemcode=d.itemcode And d.code='0001') join eba00000 g on a.id_contract=g.id_contract and g.sellunit<>'0702')left join (Select distinct id_product,price_taxfree,id_contract,amount from ebf00000 where centercode='0100') f on a.id_contract=f.id_contract and a.itemcode= f.id_product "
dt = cmd.ExecuteReader()
For Each dr As DataRow In dt.DataRows
    Dim nr As DataRow = DataTables("sos").AddNew()
    For i As Integer =0 To sCols.Length -1
        nr(dCols(i)) = dr(sCols(i))
    Next
Next
For Each dr1 As DataRow In DataTables("sos").DataRows
    Dim dr2 As DataRow= DataTables("class").Find("classcode = " & "'" & dr1("分类编码") & "'" )
    If dr2 IsNot Nothing '如果找到, 则设置各列内容
        dr1("约当量")= dr2("number")*dr1("排产数量")
        dr1("销售")= dr1("单价")*dr1("排产数量")
        dr1("产值")= dr1("单价")*dr1("排产数量")*0.88
        dr1("大类")= dr2("classaa")
    End If
Next
DataTables("sos").ResumeRedraw
'以下为合并后统计结果显示代码
With Tables("sos")
    .MergeMode = MergeModeEnum.Standard
    .MergeCols.Clear()
    .MergeCols.Add("排产日期")
    .MergeCols.Add("部门")
    .MergeCols.Add("班组")
    .MergeCols.Add("订单编号")
    .MergeSort = "排产日期,部门,班组,订单编号"
    .AllowMerge = True
End With
Dim t As Table = Tables("sos")
Dim g As Subtotalgroup
t.SubtotalGroups.Clear()
t.GroupAboveData = False
t.TreeVisible = False
g = New Subtotalgroup
g.Aggregate = AggregateEnum.Sum
g.GroupOn = "排产日期"
g.DateGroup = DateGroupEnum.day
g.Caption = "{0}"
t.SubtotalGroups.Add(g)
t.Subtotal(True)
Dim r As Row
Dim r1 As Row
For i As Integer = 1 To t.Rows.Count(True) - 1
    r = t.Rows(i,True)
    r1 = t.Rows(i-1,True)
    If r.IsGroup '如果是分组行
        Dim f As String = "排产日期 = #" & r1("排产日期") & "#"
        Dim x1 As String = "排产日期 = #" & r1("排产日期") & "# and 大类 = '分类一'"
        Dim x2 As String = "排产日期 = #" & r1("排产日期") & "# and 大类 = '分类二'"
        Dim x3 As String = "排产日期 = #" & r1("排产日期") & "# and 大类 = '分类三'"
        Dim x4 As String = "排产日期 = #" & r1("排产日期") & "# and 大类 = ''分类四"
        Dim x5 As String = "排产日期 = #" & r1("排产日期") & "# and 大类 = ''分类五"
        Dim x6 As String = "排产日期 = #" & r1("排产日期") & "# and 大类 = ''分类六"
        Dim v As String =  "销售金额:" & t.Compute("Sum(销售)",f)
        v = v & " /产值:" & t.Compute("Sum(产值)",f)
        v = v & "/分类一:" & t.Compute("Sum(约当量)",x1)
        v = v & "/分类二:" & t.Compute("Sum(约当量)",x2)
        v = v & "/分类三:" & t.Compute("Sum(约当量)",x3)
        v = v & "/分类四:" & t.Compute("Sum(约当量)",x4)
        v = v & "/分类无:" & t.Compute("Sum(约当量)",x5)
        v = v & "/分类六:" & t.Compute("Sum(约当量)",x6)
        r("排产日期") = format(r1("排产日期"),"yyyy年MM月dd日") & "排产信息提示:" & v
        Tables("sos").AutoSizeRow(i)
    End If
Next


执行的分组合并汇总结果如下图:
图片点击可在新窗口打开查看此主题相关图片如下:screenshot.jpg
图片点击可在新窗口打开查看

并不是我们希望的结果

 回到顶部
帅哥哟,离线,有人找我吗?
唐尸三摆手
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:928 积分:7769 威望:0 精华:13 注册:2008/9/1 11:58:00
合并后汇总的代码疑问  发帖心情 Post By:2011/1/13 8:02:00 [显示全部帖子]

不知道其他人有没有同样的经历,都是如何处理的呢?

 回到顶部