Foxtable(狐表)用户栏目专家坐堂 → [求助]工效计算问题(已解决)


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

主题:[求助]工效计算问题(已解决)

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


加好友 发短信
等级:七尾狐 帖子:1530 积分:10633 威望:0 精华:0 注册:2008/9/24 11:16:00
[求助]工效计算问题(已解决)  发帖心情 Post By:2014/9/28 10:55:00 [只看该作者]

工效 = 工时 / YS1,应该 25 / 27 = 0.9259,但是结果却是1.8333,是哪里出问题,请各位老师指教,谢谢!

Dim rq As String = Format( Functions.Execute("fwqsj","ABC"),"yyyy-MM-dd")
Dim sql,s As String
sql = "SELECT 日期,单位,员工,SUM(工时) AS 工时,SUM(YS1) AS YS1,Count(*) AS 计数,SUM(工时) / SUM(YS1) As 工效 FROM {C} GROUP BY 日期,单位,员工,工时,YS1"
Dim b As New CrossTableBuilder("统计",sql,"ABC")
b.HGroups.AddDef("单位")
b.HGroups.AddDef("员工")
b.VGroups.AddDef("日期",DateGroupEnum.None)
b.Totals.AddDef("计数")
b.Totals.AddDef("工时")
b.Totals.AddDef("YS1")
b.Totals.AddDef("工效")
b.VerticalTotal = True
b.Build()
MainTable = Tables("统计") '打开生成的统计表
Tables("统计").AutoSizeCols()



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

[此贴子已经被作者于2014-9-28 15:49:31编辑过]

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


加好友 发短信
等级:七尾狐 帖子:1530 积分:10633 威望:0 精华:0 注册:2008/9/24 11:16:00
  发帖心情 Post By:2014/9/28 11:16:00 [只看该作者]

问题解决,修改代码如下:

sql = "SELECT 日期,单位,员工,SUM(工时) AS 工时,SUM(YS1) AS YS1,Count(*) AS 计数,
SUM(工时) / SUM(YS1) As 工效 FROM {C} GROUP BY 日期,单位,员工"

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


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

sql = "SELECT * FROM {C}"

 

没有必要重复计算。


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


加好友 发短信
等级:七尾狐 帖子:1530 积分:10633 威望:0 精华:0 注册:2008/9/24 11:16:00
  发帖心情 Post By:2014/9/28 12:52:00 [只看该作者]

谢谢甜老师的指教,现在又碰到新问题,在原有的基础上,增加按小时分组汇总,工效的计算结果又出现问题,请各位老师指教,谢谢!!


图片点击可在新窗口打开查看此主题相关图片如下:捕获2.jpg
图片点击可在新窗口打开查看


汇总代码:
Dim sql As String 
sql = "SELECT 日期,时间,单位,员工,SUM(工时) As 工时,SUM(YS1) As YS1,Count(*) AS 计数,SUM(工时) / SUM(YS1) As 工效 FROM {C} GROUP BY 日期,时间,单位,员工"
Dim b As New CrossTableBuilder("统计",sql)
b.HGroups.AddDef("单位")
b.HGroups.AddDef("员工")
b.VGroups.AddDef("日期",DateGroupEnum.None) '日期
b.VGroups.AddDef("时间",DateGroupEnum.Hour) '小时
b.Totals.AddDef("计数")
b.Totals.AddDef("工时")
b.Totals.AddDef("YS1")
b.Totals.AddDef("工效")
b.VerticalTotal = True
b.Build()
MainTable = Tables("统计") '打开生成的统计表
Tables("统计").AutoSizeCols()



 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目4.foxdb



[此贴子已经被作者于2014-9-28 13:09:00编辑过]

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


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

Dim b As New SQLCrossTableBuilder("统计","C")
b.HGroups.AddDef("单位")
b.HGroups.AddDef("员工")
b.VGroups.AddDef("日期")
b.VGroups.AddExp("时间","hour(时间)") '小时
b.Totals.AddDef("计数")
b.Totals.AddDef("工时")
b.Totals.AddDef("YS1")
b.Totals.AddExp("工效", "工时/YS1",AggregateEnum.Average)
b.VerticalTotal = True
b.Build
MainTable = Tables("统计") '打开生成的统计表
Tables("统计").AutoSizeCols()

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


加好友 发短信
等级:七尾狐 帖子:1530 积分:10633 威望:0 精华:0 注册:2008/9/24 11:16:00
  发帖心情 Post By:2014/9/28 14:37:00 [只看该作者]

谢谢甜老师的指教,如果工效要求保留3位小数,应该如何设置?还请老师指教,谢谢!!

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


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


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


加好友 发短信
等级:七尾狐 帖子:1530 积分:10633 威望:0 精华:0 注册:2008/9/24 11:16:00
  发帖心情 Post By:2014/9/28 15:40:00 [只看该作者]

谢谢甜老师的指教,刚才试了一下,加了格式化后,只是在后面加0,精度太低,后来用循环计算来解决问题。
在原代码的基础上增加了水平方向自动汇总后,代码如下:

Dim t As Table = Tables("统计")
Dim i As Integer =(Tables("统计").Cols.Count-6)/4 ‘获取循环次数
For Each dr As Row In t.Rows
    For j As Integer = 1 To i
        If dr.IsNull("计数_" & j) Then
            dr("工效_" & j) = Nothing
        Else
            dr("工效_" & j) = dr("工时_" & j) / dr("YS1_" & j) 
        End If
    Next
Next

这样计算的精度才能符合要求。谢谢甜老师的启发。

还有一个问题请教老师:如果对汇总的日期有要求的话,是否还是要用SELECT语句,请指教,谢谢!!
[此贴子已经被作者于2014-9-28 15:42:33编辑过]

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


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

 对日期有要求,就直接洗 b.Filter = "条件"

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


加好友 发短信
等级:七尾狐 帖子:1530 积分:10633 威望:0 精华:0 注册:2008/9/24 11:16:00
  发帖心情 Post By:2014/9/28 15:49:00 [只看该作者]

问题全部得到解决,谢谢甜老师的耐心帮助,再次衷心感谢!!

 回到顶部