以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- SQL数据库平均值计算代码 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=157428) |
||||
-- 作者:weibu -- 发布时间:2020/10/15 17:27:00 -- SQL数据库平均值计算代码 老师下面是我做的个样例;数据库用的是SQl数据库,希望窗口中点击按钮,计算SQL数据库中所有符合条件的平均值。 平均值计算规则:表“完成值”里面的字段“是否计算”=是;按月份计算相同月份工作项的平均值,并把数据更新到表“平均值”对应的项目中;
|
||||
-- 作者:有点蓝 -- 发布时间:2020/10/15 21:02:00 -- 直接做个分组统计即可 Dim g As New GroupTableBuilder("统计表1", DataTables("完成值")) g.Groups.AddDef("月份") g.Groups.AddDef("工作项") g.Totals.AddDef("完成值") g.FromServer = True g.Filter = "是否计算=true" g.Build() MainTable = Tables("统计表1") [此贴子已经被作者于2020/10/15 21:02:34编辑过]
|
||||
-- 作者:weibu -- 发布时间:2020/10/16 8:16:00 -- 老师这个“平均值”我不能作为临时表。因为后面还有很多业务处理要用到这个表。 |
||||
-- 作者:有点蓝 -- 发布时间:2020/10/16 9:17:00 -- 生成统计表,在把数据导过去 |
||||
-- 作者:weibu -- 发布时间:2020/10/16 9:42:00 -- 这样用起来麻烦,也容易出差啊。老师不能点击计算到“平均值”表中吗? |
||||
-- 作者:有点蓝 -- 发布时间:2020/10/16 9:57:00 -- Dim t As Table = Tables("平均值") For Each r As Row In t.Rows If r.IsNull("月份") = False Then r("平均值") = DataTables("完成值").SQLCompute("sum(完成值)","月份=" & r("月份") & " and 工作项=\'" & r("工作项") & "\' and 是否计算=true") End If Next
|
||||
-- 作者:weibu -- 发布时间:2020/10/16 10:18:00 -- 谢谢老师,您推荐用统计表的原因是不是,如果数据量大的时候,统计表的执行效率要远高于用代码遍历进行计算的效率? |
||||
-- 作者:有点蓝 -- 发布时间:2020/10/16 10:29:00 -- 这是肯定的,可以生成统计表,然后把数据移过去 Dim g As New GroupTableBuilder("统计表1", DataTables("完成值")) g.Groups.AddDef("月份") g.Groups.AddDef("工作项") g.Totals.AddDef("完成值") g.FromServer = True g.Filter = "是否计算=true" Dim dt As DataTable = g.Build(True) Dim t As Table = Tables("平均值") For Each r As Row In t.Rows If r.IsNull("月份") = False Then Dim dr As DataRow = dt.find("月份=" & r("月份") & " and 工作项=\'" & r("工作项") & "\'") If dr IsNot Nothing Then r("平均值") = dr("完成值") End If End If Next |