Foxtable(狐表)用户栏目专家坐堂 → SQL数据库平均值计算代码


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

主题:SQL数据库平均值计算代码

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


加好友 发短信
等级:三尾狐 帖子:659 积分:5363 威望:0 精华:0 注册:2018/5/19 22:27:00
SQL数据库平均值计算代码  发帖心情 Post By:2020/10/15 17:27:00 [只看该作者]

老师下面是我做的个样例;数据库用的是SQl数据库,希望窗口中点击按钮,计算SQL数据库中所有符合条件的平均值。
平均值计算规则:表“完成值”里面的字段“是否计算”=是;按月份计算相同月份工作项的平均值,并把数据更新到表“平均值”对应的项目中;
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目1.zip


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


加好友 发短信
等级:超级版主 帖子:111427 积分:567211 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By: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
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:659 积分:5363 威望:0 精华:0 注册:2018/5/19 22:27:00
  发帖心情 Post By:2020/10/16 8:16:00 [只看该作者]

老师这个“平均值”我不能作为临时表。因为后面还有很多业务处理要用到这个表。

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


加好友 发短信
等级:超级版主 帖子:111427 积分:567211 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/10/16 9:17:00 [只看该作者]

生成统计表,在把数据导过去

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


加好友 发短信
等级:三尾狐 帖子:659 积分:5363 威望:0 精华:0 注册:2018/5/19 22:27:00
  发帖心情 Post By:2020/10/16 9:42:00 [只看该作者]

这样用起来麻烦,也容易出差啊。老师不能点击计算到“平均值”表中吗?

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


加好友 发短信
等级:超级版主 帖子:111427 积分:567211 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By: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
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:659 积分:5363 威望:0 精华:0 注册:2018/5/19 22:27:00
  发帖心情 Post By:2020/10/16 10:18:00 [只看该作者]

谢谢老师,您推荐用统计表的原因是不是,如果数据量大的时候,统计表的执行效率要远高于用代码遍历进行计算的效率?

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


加好友 发短信
等级:超级版主 帖子:111427 积分:567211 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By: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

 回到顶部