以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- [求助]工效计算问题(已解决) (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=57633) |
-- 作者:yyzlxc -- 发布时间: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() [此贴子已经被作者于2014-9-28 15:49:31编辑过]
|
-- 作者:yyzlxc -- 发布时间:2014/9/28 11:16:00 -- 问题解决,修改代码如下: |
-- 作者:有点甜 -- 发布时间:2014/9/28 11:17:00 -- sql = "SELECT * FROM {C}"
没有必要重复计算。 |
-- 作者:yyzlxc -- 发布时间: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() [此贴子已经被作者于2014-9-28 13:09:00编辑过]
|
-- 作者:有点甜 -- 发布时间: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 -- 发布时间:2014/9/28 14:37:00 -- 谢谢甜老师的指教,如果工效要求保留3位小数,应该如何设置?还请老师指教,谢谢!! |
-- 作者:有点甜 -- 发布时间:2014/9/28 14:54:00 -- http://www.foxtable.com/help/topics/1659.htm
|
-- 作者:yyzlxc -- 发布时间: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编辑过]
|
-- 作者:有点甜 -- 发布时间:2014/9/28 15:42:00 -- 对日期有要求,就直接洗 b.Filter = "条件" |
-- 作者:yyzlxc -- 发布时间:2014/9/28 15:49:00 -- 问题全部得到解决,谢谢甜老师的耐心帮助,再次衷心感谢!! |