注册 登录
编程论坛 VFP论坛

如何计算一月份每个人的餐补费用

王咸美 发布于 2023-04-08 19:22, 1018 次点击
如何计算每个人一月份的餐补费用?早、中班餐补5元,晚班餐补3.5元。数据很多,仅列举部分,供测试用。请高手赐教,万分感谢!【由于电脑不在身边,无法上传具体数据】
只有本站会员才能查看附件,请 登录


[此贴子已经被作者于2023-4-8 19:24编辑过]

10 回复
#2
sdta2023-04-08 19:38
等你电脑在身边了,上传相关表。
#3
shizi02023-04-08 20:52
cFld='jan_01+jan_02.....'
select 姓名,sum(occurs('早',evalute(cFld))*3.5+occurs('中',evalute(cFld))*5+occurs('晚',evalute(cFld))*5) as 总餐补 from 表 group by 姓名
#4
王咸美2023-04-08 22:26
谢谢!相加的字段有31个之多,对应31天。Jan_01+Jan_02+Jan_03+……+Jan_31这31个字段值相加如何简写?望赐教。谢谢!
#5
pvm20002023-04-09 00:58
以下是引用王咸美在2023-4-8 22:26:37的发言:

谢谢!相加的字段有31个之多,对应31天。Jan_01+Jan_02+Jan_03+……+Jan_31这31个字段值相加如何简写?望赐教。谢谢!

这个简单,用宏替换
#6
王咸美2023-04-09 06:56
宏替换怎么用,请指点!谢谢!
#7
吹水佬2023-04-09 08:03
理顺一下数据关系,数据结构应该可以优化一下,算法会灵活一些。
只有本站会员才能查看附件,请 登录

程序代码:
ALINES(cj,"早,中,晚",",")
ALINES(nj,"5,5,3.5",",")
CREATE CURSOR tt (xm c(10), j1 c(2), j2 c(2), j3 c(2))
INSERT INTO tt VALUES ("姓名1","早","中","晚")
INSERT INTO tt VALUES ("姓名2","中","晚","早")
INSERT INTO tt VALUES ("姓名3","早","晚","早")
INSERT INTO tt VALUES ("姓名4","晚","中","晚")
SELECT *, fun() hj FROM tt

FUNCTION fun()
    LOCAL i,ret
    ret = 0
    FOR i=2 TO FCOUNT()
        ret = ret + VAL(nj[ASCAN(cj,EVALUATE(FIELD(i)))])
    ENDFOR
    RETURN ret
ENDFUNC


#8
sdta2023-04-09 08:33
程序代码:
CREATE CURSOR tt (xm c(10), hj n(6,2), a01 c(4), a02 c(4), a03 c(4))
INSERT INTO tt VALUES ("aaa", 0, "中", "早", "晚")
INSERT INTO tt VALUES ("bbb", 0, "晚", "晚", "晚")
INSERT INTO tt VALUES ("ccc", 0, "中", "早", "早")
SCAN
    lnsum = 0
    FOR ln = 3 TO FCOUNT()
        lnsum = lnsum + IIF(INLIST(EVALUATE(FIELD(ln)), "中", "早"), 5, 3.5)
    ENDFOR
    REPLACE hj WITH lnsum
ENDSCAN
BROWSE
#9
王咸美2023-04-09 09:34
谢谢各位的热心指点!我想另外生成一张表 Cbb.dbf 字段名为:姓名 C(10),早班(个)N(4),中班 N(4),晚班(个)N(4),餐补 N(5,1) 请各位赐教,谢谢!!!

[此贴子已经被作者于2023-4-9 10:01编辑过]

#10
sam_jiang2023-04-09 10:17
感觉餐补明细账的表格应该设置为姓名,日期,班次,餐补四个字段,31个字段太多了。难道每个月做一个表格?
#11
sdta2023-04-09 11:13
以下是引用王咸美在2023-4-9 09:34:32的发言:

谢谢各位的热心指点!我想另外生成一张表 Cbb.dbf 字段名为:姓名 C(10),早班(个)N(4),中班 N(4),晚班(个)N(4),餐补 N(5,1) 请各位赐教,谢谢!!!

结帖后重新发帖
1