以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 组合多个统计结果 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=73810) |
-- 作者:阿福 -- 发布时间:2015/8/27 10:25:00 -- 组合多个统计结果 请教一下老师们,下面的代码需要25秒才能执行完,有没有快一点的方法? Dim g1 As New SQLGroupTableBuilder("统计表1", "母猪基本信息") g1.C Dim d1 As fxDataSource g1.Groups.AddDef("购买_日期", DateGroupEnum.Year, "日期_年") g1.Groups.AddDef("购买_日期", "日期_月") g1.Totals.AddDef("购买_金额", "购买_母猪") g1.Filter = "[sys_user]=\'" & user.Name & "\'" d1 = g1.BuildDataSource() Dim g2 As New SQLGroupTableBuilder("统计表2", "公猪信息") g2.C Dim d2 As fxDataSource g2.Groups.AddDef("购买_日期", DateGroupEnum.Year, "日期_年") g2.Groups.AddDef("购买_日期", "日期_月") g2.Totals.AddDef("购买_金额", "购买_公猪") g2.Filter = "[sys_user]=\'" & user.Name & "\'" d2 = g2.BuildDataSource() Dim g3 As New SQLGroupTableBuilder("统计表3", "肉猪信息") g3.C Dim d3 As fxDataSource g3.Groups.AddDef("购买_日期", DateGroupEnum.Year, "日期_年") g3.Groups.AddDef("购买_日期", "日期_月") g3.Totals.AddDef("购买_金额", "购买_肉猪") g3.Filter = "[sys_user]=\'" & user.Name & "\'" d3 = g3.BuildDataSource() Dim g4 As New SQLGroupTableBuilder("统计表4", "饲料采购") g4.C Dim d4 As fxDataSource g4.Groups.AddDef("日期", DateGroupEnum.Year, "日期_年") g4.Groups.AddDef("日期", "日期_月") g4.Totals.AddDef("饲料量_总金额", "饲料") g4.Filter = "[sys_user]=\'" & user.Name & "\'" d4 = g4.BuildDataSource() Dim g5 As New SQLGroupTableBuilder("统计表5", "疫苗采购") g5.C Dim d5 As fxDataSource g5.Groups.AddDef("日期", DateGroupEnum.Year, "日期_年") g5.Groups.AddDef("日期", "日期_月") g5.Totals.AddDef("总金额", "疫苗") g5.Filter = "[sys_user]=\'" & user.Name & "\'" d5 = g5.BuildDataSource() Dim g6 As New SQLGroupTableBuilder("统计表6", "药品采购") g6.C Dim d6 As fxDataSource g6.Groups.AddDef("日期", DateGroupEnum.Year, "日期_年") g6.Groups.AddDef("日期", "日期_月") g6.Totals.AddDef("总金额", "药品") g6.Filter = "[sys_user]=\'" & user.Name & "\'" d6 = g6.BuildDataSource() Dim g7 As New SQLGroupTableBuilder("统计表7", "易耗品采购") g7.C Dim d7 As fxDataSource g7.Groups.AddDef("日期", DateGroupEnum.Year, "日期_年") g7.Groups.AddDef("日期", "日期_月") g7.Totals.AddDef("总金额", "易耗品") g7.Filter = "[sys_user]=\'" & user.Name & "\'" d7 = g7.BuildDataSource() Dim g8 As New SQLGroupTableBuilder("统计表8", "保险费") g8.C Dim d8 As fxDataSource g8.Groups.AddDef("日期", DateGroupEnum.Year, "日期_年") g8.Groups.AddDef("日期", "日期_月") g8.Totals.AddDef("投保金额", "保险费") g8.Filter = "[sys_user]=\'" & user.Name & "\'" d8 = g8.BuildDataSource() Dim g9 As New SQLGroupTableBuilder("统计表9", "水电费") g9.C Dim d9 As fxDataSource g9.Groups.AddDef("日期", DateGroupEnum.Year, "日期_年") g9.Groups.AddDef("日期", "日期_月") g9.Totals.AddDef("金额", "水电费") g9.Filter = "[sys_user]=\'" & user.Name & "\'" d9 = g9.BuildDataSource() Dim g10 As New SQLGroupTableBuilder("统计表10", "工资费用") g10.C Dim d10 As fxDataSource g10.Groups.AddDef("日期", DateGroupEnum.Year, "日期_年") g10.Groups.AddDef("日期", "日期_月") g10.Totals.AddDef("金额", "工资费用") g10.Filter = "[sys_user]=\'" & user.Name & "\'" d10 = g10.BuildDataSource() Dim g11 As New SQLGroupTableBuilder("统计表11", "工程折旧费用") g11.C Dim d11 As fxDataSource g11.Groups.AddDef("日期", DateGroupEnum.Year, "日期_年") g11.Groups.AddDef("日期", "日期_月") g11.Totals.AddDef("支出金额", "工程折旧费") g11.Filter = "[sys_user]=\'" & user.Name & "\'" d11 = g11.BuildDataSource() Dim g12 As New SQLGroupTableBuilder("统计表12", "其他支出") g12.C Dim d12 As fxDataSource g12.Groups.AddDef("日期", DateGroupEnum.Year, "日期_年") g12.Groups.AddDef("日期", "日期_月") g12.Totals.AddDef("金额", "其他支出") g12.Filter = "[sys_user]=\'" & user.Name & "\'" d12 = g12.BuildDataSource() Dim nms As String() = {"日期_年","日期_月"} d1.Combine(nms,d2,nms) d1.Combine(nms,d3,nms) d1.Combine(nms,d4,nms) d1.Combine(nms,d5,nms) d1.Combine(nms,d6,nms) d1.Combine(nms,d7,nms) d1.Combine(nms,d8,nms) d1.Combine(nms,d9,nms) d1.Combine(nms,d10,nms) d1.Combine(nms,d11,nms) d1.Combine(nms,d12,nms) Tables("支出统计_Table1").DataSource = d1 With DataTables("支出统计_Table1").DataCols .Add("合计",Gettype(Integer), "IsNull([购买_母猪],0) + ISNULL([购买_公猪],0) + ISNULL([购买_肉猪],0) + ISNULL([饲料],0) + ISNULL([疫苗],0) + ISNULL([药品],0) + ISNULL([易耗品],0) + ISNULL([保险费],0) + ISNULL([水电费],0) + ISNULL([工资费用],0) + ISNULL([工程折旧费],0) + ISNULL([其他支出],0) ") .Add("比例_母猪",Gettype(Double),"IIF(IsNull([购买_母猪],0) = 0, null, IsNull([购买_母猪],0) / IsNull([合计],0))") .Add("比例_公猪",Gettype(Double),"IIF(IsNull([购买_公猪],0) = 0, null, IsNull([购买_公猪],0) / IsNull([合计],0))") .Add("比例_肉猪",Gettype(Double),"IIF(IsNull([购买_肉猪],0) = 0, null, IsNull([购买_肉猪],0) / IsNull([合计],0))") .Add("比例_饲料",Gettype(Double),"IIF(IsNull([饲料],0) = 0, null, IsNull([饲料],0) / IsNull([合计],0))") .Add("比例_疫苗",Gettype(Double),"IIF(IsNull([疫苗],0) = 0, null, IsNull([疫苗],0) / IsNull([合计],0))") .Add("比例_药品",Gettype(Double),"IIF(IsNull([药品],0) = 0, null, IsNull([药品],0) / IsNull([合计],0))") .Add("比例_易耗品",Gettype(Double),"IIF(IsNull([易耗品],0) = 0, null, IsNull([易耗品],0) / IsNull([合计],0))") .Add("比例_保险费",Gettype(Double),"IIF(IsNull([保险费],0) = 0, null, IsNull([保险费],0) / IsNull([合计],0))") .Add("比例_水电费",Gettype(Double),"IIF(IsNull([水电费],0) = 0, null, IsNull([水电费],0) / IsNull([合计],0))") .Add("比例_工资费用",Gettype(Double),"IIF(IsNull([工资费用],0) = 0, null, IsNull([工资费用],0) / IsNull([合计],0))") .Add("比例_工程折旧费",Gettype(Double),"IIF(IsNull([工程折旧费],0) = 0, null, IsNull([工程折旧费],0) / IsNull([合计],0))") .Add("比例_其他支出",Gettype(Double),"IIF(IsNull([其他支出],0) = 0, null, IsNull([其他支出],0) / IsNull([合计],0))") End With Dim s As String() = {"比例_母猪","比例_公猪","比例_肉猪","比例_饲料","比例_疫苗","比例_药品","比例_易耗品","比例_保险费","比例_水电费","比例_工资费用","比例_工程折旧费","比例_其他支出"} For i As Integer = 0 To s.Length - 1 DataTables("支出统计_Table1").DataCols(s(i)).SetFormat("0.0%") Next Tables("支出统计_Table1").DefaultColWidth = 70 |
-- 作者:大红袍 -- 发布时间:2015/8/27 10:29:00 -- 加入msgbox弹出看哪里耗时比较长。
如果是上面的统计耗时,你改成用一句sql语句的方式执行更迅速。 |
-- 作者:阿福 -- 发布时间:2015/8/27 11:26:00 -- 老师,黄色那段代码出现了黄色段的错误提示,该怎么改? Dim cmd As New SQLCommand Dim dt As DataTable = DataTables("收入统计_table1") cmd.C cmd.CommandText = "SELECT YEAR({母猪基本信息}.销售_日期), month({母猪基本信息}.销售_日期), {母猪基本信息}.销售_金额 as 销售_母猪, {公猪信息}.销售_金额 as 销售_公猪," & _ "{肉猪信息}.销售_金额 as 销售_肉猪猪, {补贴项目}.金额 as 补贴项目, {其他收入}.金额 as 其他收入 f rom ((({母猪基本信息} inner join {公猪信息} on {母猪基本信息}.销售_日期 = {公猪信息}.销售_日期)" & _ "inner join {肉猪信息} on {母猪基本信息}.销售_日期 = {肉猪信息}.销售_日期) inner join {补贴项目} on {母猪基本信息}.销售_日期 = {补贴项目}.日期) inner join {母猪基本信息}.销售_日期 = {其他收入}.日期" & _ "where [sys_user] = \'" & user.Name & "\' group by {母猪基本信息}.销售_日期 order by {母猪基本信息}.销售_日期" dt = cmd.ExecuteReader() With dt.DataCols .Add("合计",Gettype(Integer), "IsNull([销售_母猪],0) + ISNULL([销售_公猪],0) + ISNULL([销售_肉猪],0) + ISNULL([补贴项目],0) + ISNULL([其他收入],0)") .Add("比例_母猪",Gettype(Double),"IIF(IsNull([销售_母猪],0) = 0, null, IsNull([销售_母猪],0) / IsNull([合计],0))") .Add("比例_公猪",Gettype(Double),"IIF(IsNull([销售_公猪],0) = 0, null, IsNull([销售_公猪],0) / IsNull([合计],0))") .Add("比例_肉猪",Gettype(Double),"IIF(IsNull([销售_肉猪],0) = 0, null, IsNull([销售_肉猪],0) / IsNull([合计],0))") .Add("比例_补贴项目",Gettype(Double),"IIF(IsNull([补贴项目],0) = 0, null, IsNull([补贴项目],0) / IsNull([合计],0))") .Add("比例_其他收入",Gettype(Double),"IIF(IsNull([其他收入],0) = 0, null, IsNull([其他收入],0) / IsNull([合计],0))") End With .NET Framework 版本:2.0.50727.8000 Foxtable 版本:2014.11.11.1 错误所在事件: 详细错误信息: \'=\' 附近有语法错误。 |
-- 作者:大红袍 -- 发布时间:2015/8/27 11:40:00 -- 先做两个
Select year(购买_日期) as 日期_年, month(购买_日期) as 日期_月, sum(购买_母猪) as 购买_母猪, sum(购买_公猪) as 购买_公猪 fr om ( select 购买_日期, 购买_金额 as 购买_母猪, 0 as 购买_公猪 fr om 母猪基本信息 un ion all select 购买_日期, 0, 购买_金额 fr om 公猪信息) as a Group by year(购买_日期), month(购买_日期)
|
-- 作者:阿福 -- 发布时间:2015/8/27 11:48:00 -- 老师不是啦,我的意思是下面代码出现了黄色错误提示:请你改一下! "SELECT YEAR({母猪基本信息}.销售_日期), month({母猪基本信息}.销售_日期), {母猪基本信息}.销售_金额 as 销售_母猪, {公猪信息}.销售_金额 as 销售_公猪, {肉猪信息}.销售_金额 as 销售_肉猪猪, {补贴项目}.金额 as 补贴项目, {其他收入}.金额 as 其他收入 f rom ((({母猪基本信息} inner join {公猪信息} on {母猪基本信息}.销售_日期 = {公猪信息}.销售_日期) inner join {肉猪信息} on {母猪基本信息}.销售_日期 = {肉猪信息}.销售_日期) inner join {补贴项目} on {母猪基本信息}.销售_日期 = {补贴项目}.日期) inner join {母猪基本信息}.销售_日期 = {其他收入}.日期 where [sys_user] = \'" & user.Name & "\' group by {母猪基本信息}.销售_日期 order by {母猪基本信息}.销售_日期" .NET Framework 版本:2.0.50727.8000 Foxtable 版本:2014.11.11.1 错误所在事件: 详细错误信息: \'=\' 附近有语法错误。 |
-- 作者:大红袍 -- 发布时间:2015/8/27 11:49:00 -- 你写的代码有问题啊。参考4楼写法 |
-- 作者:阿福 -- 发布时间:2015/8/27 15:35:00 -- 老师,4楼代码黄色部分是不是有错误? Select year(购买_日期) as 日期_年, month(购买_日期) as 日期_月, sum(购买_母猪) as 购买_母猪, sum(购买_公猪) as 购买_公猪 fr om ( select 购买_日期, 购买_金额 as 购买_母猪, 0 as 购买_公猪 fr om 母猪基本信息 un ion all select 购买_日期, 0, 购买_金额 fr om 公猪信息) as a Group by year(购买_日期), month(购买_日期) |
-- 作者:大红袍 -- 发布时间:2015/8/27 15:36:00 -- 没有错误,目的让全部数据合并成一张大的表格。 |
-- 作者:阿福 -- 发布时间:2015/8/27 15:44:00 -- {母猪基本信息}, {公猪信息} 表名没有用大括号括起来,怎么有“0” 出现 |
-- 作者:Hyphen -- 发布时间:2015/8/27 15:48:00 -- 大红袍只是给你一个思路,具体的代码要根据自己的项目修改,不要只是拷贝使用 |