Foxtable(狐表)用户栏目专家坐堂 → 关于客户合计,为什么有错?


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

主题:关于客户合计,为什么有错?

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


加好友 发短信
等级:三尾狐 帖子:660 积分:3965 威望:0 精华:0 注册:2014/3/16 20:34:00
关于客户合计,为什么有错?  发帖心情 Post By:2014/5/5 20:45:00 [只看该作者]

以下是合计客户销量,的代码,请问是哪里出现问题了??

 

 

MainTable = Tables("订单")
If CustomFilter = "" Then
    CustomFilter = "1 = 1" '或者CustomFilter = "1 = 2"
End If
Dim Cmd As new SQLCommand
Cmd.C
Cmd.CommandText = "select distinct 分区,客户编码,客户,年,月份,目标 from 专卖店目标 where " & CustomFilter
Dim dt1 As DataTable = Cmd.ExecuteReader
Dim dtb As New DataTableBuilder("统计")
dtb.AddDef("分区", Gettype(String), 50)
dtb.AddDef("客户编码", Gettype(String), 150)
dtb.AddDef("客户", Gettype(String), 150)
Dim prds As List(of String()) = dt1.GetUniqueValues("","年","月份")
Dim exp As String
dtb.AddDef("目标总额", Gettype(Double))
dtb.AddDef("销售总额", Gettype(Double))
dtb.AddDef("达成率", Gettype(Double),"[销售总额]/[目标总额]")
For Each prd As String() In prds
    dtb.AddDef(prd(0) & "_" & prd(1) & "_目标", Gettype(Double))
    dtb.AddDef(prd(0) & "_" & prd(1) & "_销售", Gettype(Double))
    exp = String.format("[{0}]/[{1}]",prd(0) & "_" & prd(1) & "_销售" ,prd(0) & "_" & prd(1) & "_目标" )
    dtb.AddDef(prd(0) & "_" & prd(1) & "_达成率", Gettype(Double),exp)
Next
dtb.Build()
Cmd.CommandText = "select 分区,客户编码,客户,year(日期) as 年,month(日期) as 月份,sum(金额) as 销售 from 订单 where " & CustomFilter & " group by 分区,客户编码,客户,year(日期),month(日期)"
Dim dt2 As DataTable = Cmd.ExecuteReader
For Each cus As String() In dt1.GetUniqueValues("","分区","客户编码","客户")
    Dim dr As DataRow = DataTables("统计").AddNew()
    dr("分区") = cus(0)
    dr("客户编码") = cus(1)
    dr("客户") = cus(2)
    For Each prd As String() In prds
        dr(prd(0) & "_" & prd(1) & "_目标") = dt1.Compute("Sum(目标)","分区 = '" & cus(0) & "' And 客户编码 = '" & cus(1) & "' And [年] = '" & prd(0) & "' and 月份 = '"& prd(1) &"'")
        dr(prd(0) & "_" & prd(1) & "_销售") = dt2.Compute("Sum(销售)","分区 = '" & cus(0) & "' And 客户编码 = '" & cus(1) & "' And [年] = '" & prd(0) & "' and 月份 = '"& prd(1) &"'")
    Next
    dr("目标总额") = dt1.Compute("Sum(目标)","分区 = '" & cus(0) & "' And 客户编码 = '" & cus(1) & "'")
    dr("销售总额") = dt2.Compute("Sum(销售)","分区 = '" & cus(0) & "' And 客户编码 = '" & cus(1) & "'")
'******************************合计行
dr = DataTables("统计").AddNew()
dr("客户") = "合计"
For Each prd In prds
    Dim ColName1 As String = prd(0) & "_" & prd(1) & "_目标"
    Dim ColName2 As String = prd(0) & "_" & prd(1) & "_销售"
    dr(ColName1) = dt1.Compute("Sum(目标)","[年] = '" & prd(0) & "' and 月份 = '"& prd(1) &"'")
    dr(ColName2) = dt2.Compute("Sum(销售)","[年] = '" & prd(0) & "' and 月份 = '"& prd(1) &"'")
Next
dr("目标总额") = DataTables("统计").Compute("Sum(目标总额)")
dr("销售总额") = DataTables("统计").Compute("Sum(销售总额)")
'********************************

Next
For Each prd As String() In prds
    DataTables("统计").DataCols(prd(0) & "_" & prd(1) & "_达成率").SetFormat("0.00%")
Next
DataTables("统计").DataCols("达成率").SetFormat("0.00%")
MainTable = Tables("统计")
Tables("统计").AutoSizeCols


图片点击可在新窗口打开查看此主题相关图片如下:360截图20140505204429015.jpg
图片点击可在新窗口打开查看

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/5/5 20:47:00 [只看该作者]

 在最前面加一句

 

Dim prd() As String


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/5/5 20:48:00 [只看该作者]

 或者,把这句改一下

 

For Each prd In prds

 改成

 

For Each prd As String() In prds

[此贴子已经被作者于2014-5-5 20:54:31编辑过]

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


加好友 发短信
等级:三尾狐 帖子:660 积分:3965 威望:0 精华:0 注册:2014/3/16 20:34:00
  发帖心情 Post By:2014/5/5 20:54:00 [只看该作者]

出现新的错误了~
图片点击可在新窗口打开查看此主题相关图片如下:360截图20140505205328343.jpg
图片点击可在新窗口打开查看

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/5/5 20:55:00 [只看该作者]

 这样

 

For Each prd In prds

 

 改成

 

For Each prd As String() In prds

[此贴子已经被作者于2014-5-5 20:55:15编辑过]

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


加好友 发短信
等级:三尾狐 帖子:660 积分:3965 威望:0 精华:0 注册:2014/3/16 20:34:00
  发帖心情 Post By:2014/5/5 20:58:00 [只看该作者]


'******************************合计行
dr = DataTables("统计").AddNew()
dr("客户") = "合计"
Dim prd() As String
For Each prd In prds
    Dim ColName1 As String = prd(0) & "_" & prd(1) & "_目标"
    Dim ColName2 As String = prd(0) & "_" & prd(1) & "_销售"
    dr(ColName1) = dt1.Compute("Sum(目标)","[年] = '" & prd(0) & "' and 月份 = '"& prd(1) &"'")
    dr(ColName2) = dt2.Compute("Sum(销售)","[年] = '" & prd(0) & "' and 月份 = '"& prd(1) &"'")
Next
dr("目标总额") = DataTables("统计").Compute("Sum(目标总额)")
dr("销售总额") = DataTables("统计").Compute("Sum(销售总额)")
'********************************
Next
For Each prd As String() In prds
    DataTables("统计").DataCols(prd(0) & "_" & prd(1) & "_达成率").SetFormat("0.00%")
Next
DataTables("统计").DataCols("达成率").SetFormat("0.00%")
MainTable = Tables("统计")
Tables("统计").AutoSizeCols

图片点击可在新窗口打开查看此主题相关图片如下:360截图20140505205729406.jpg
图片点击可在新窗口打开查看

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/5/5 21:01:00 [只看该作者]

 第一步:把 Dim prd() As String  去掉

 

 第二步:改成 For Each prd As String() In prds


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


加好友 发短信
等级:三尾狐 帖子:660 积分:3965 威望:0 精华:0 注册:2014/3/16 20:34:00
  发帖心情 Post By:2014/5/5 21:13:00 [只看该作者]

老师,这样就会是每个客户的合计,这个不是我想要的,我想要的是,所有客户,最后合计一项即可

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


加好友 发短信
等级:三尾狐 帖子:660 积分:3965 威望:0 精华:0 注册:2014/3/16 20:34:00
  发帖心情 Post By:2014/5/5 21:14:00 [只看该作者]

现在的代码是

MainTable = Tables("订单")
If CustomFilter = "" Then
    CustomFilter = "1 = 1" '或者CustomFilter = "1 = 2"
End If
Dim Cmd As new SQLCommand
Cmd.C
Cmd.CommandText = "select distinct 分区,客户编码,客户,年,月份,目标 from 专卖店目标 where " & CustomFilter
Dim dt1 As DataTable = Cmd.ExecuteReader
Dim dtb As New DataTableBuilder("统计")
dtb.AddDef("分区", Gettype(String), 50)
dtb.AddDef("客户编码", Gettype(String), 150)
dtb.AddDef("客户", Gettype(String), 150)
Dim prds As List(of String()) = dt1.GetUniqueValues("","年","月份")
Dim exp As String
dtb.AddDef("目标总额", Gettype(Double))
dtb.AddDef("销售总额", Gettype(Double))
dtb.AddDef("达成率", Gettype(Double),"[销售总额]/[目标总额]")
For Each prd As String() In prds
    dtb.AddDef(prd(0) & "_" & prd(1) & "_目标", Gettype(Double))
    dtb.AddDef(prd(0) & "_" & prd(1) & "_销售", Gettype(Double))
    exp = String.format("[{0}]/[{1}]",prd(0) & "_" & prd(1) & "_销售" ,prd(0) & "_" & prd(1) & "_目标" )
    dtb.AddDef(prd(0) & "_" & prd(1) & "_达成率", Gettype(Double),exp)
Next
dtb.Build()
Cmd.CommandText = "select 分区,客户编码,客户,year(日期) as 年,month(日期) as 月份,sum(金额) as 销售 from 订单 where " & CustomFilter & " group by 分区,客户编码,客户,year(日期),month(日期)"
Dim dt2 As DataTable = Cmd.ExecuteReader
For Each cus As String() In dt1.GetUniqueValues("","分区","客户编码","客户")
    Dim dr As DataRow = DataTables("统计").AddNew()
    dr("分区") = cus(0)
    dr("客户编码") = cus(1)
    dr("客户") = cus(2)
    For Each prd As String() In prds
        dr(prd(0) & "_" & prd(1) & "_目标") = dt1.Compute("Sum(目标)","分区 = '" & cus(0) & "' And 客户编码 = '" & cus(1) & "' And [年] = '" & prd(0) & "' and 月份 = '"& prd(1) &"'")
        dr(prd(0) & "_" & prd(1) & "_销售") = dt2.Compute("Sum(销售)","分区 = '" & cus(0) & "' And 客户编码 = '" & cus(1) & "' And [年] = '" & prd(0) & "' and 月份 = '"& prd(1) &"'")
    Next
    dr("目标总额") = dt1.Compute("Sum(目标)","分区 = '" & cus(0) & "' And 客户编码 = '" & cus(1) & "'")
    dr("销售总额") = dt2.Compute("Sum(销售)","分区 = '" & cus(0) & "' And 客户编码 = '" & cus(1) & "'")
'******************************合计行
dr = DataTables("统计").AddNew()
dr("客户") = "合计"
For Each prd As String() In prds
    Dim ColName1 As String = prd(0) & "_" & prd(1) & "_目标"
    Dim ColName2 As String = prd(0) & "_" & prd(1) & "_销售"
    dr(ColName1) = dt1.Compute("Sum(目标)","[年] = '" & prd(0) & "' and 月份 = '"& prd(1) &"'")
    dr(ColName2) = dt2.Compute("Sum(销售)","[年] = '" & prd(0) & "' and 月份 = '"& prd(1) &"'")
Next
dr("目标总额") = DataTables("统计").Compute("Sum(目标总额)")
dr("销售总额") = DataTables("统计").Compute("Sum(销售总额)")
'********************************
Next
For Each prd As String() In prds
    DataTables("统计").DataCols(prd(0) & "_" & prd(1) & "_达成率").SetFormat("0.00%")
Next
DataTables("统计").DataCols("达成率").SetFormat("0.00%")
MainTable = Tables("统计")
Tables("统计").AutoSizeCols

 


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


加好友 发短信
等级:三尾狐 帖子:660 积分:3965 威望:0 精华:0 注册:2014/3/16 20:34:00
  发帖心情 Post By:2014/5/5 21:15:00 [只看该作者]

附件:
图片点击可在新窗口打开查看此主题相关图片如下:360截图20140505211021625.jpg
图片点击可在新窗口打开查看

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