标题:还是统计相关问题
只看楼主
月沐庭轩
Rank: 9Rank: 9Rank: 9
来 自:京城
等 级:贵宾
威 望:17
帖 子:393
专家分:1106
注 册:2011-7-24
得分:5 
我是用了replace语句。
程序代码:
USE 年休假汇总表
SCAN
    REPLACE  工作年限 WITH f工作年限(工作时间)
    REPLACE  年休假天数 WITH f年休假天数(工作年限)
    REPLACE  本年应休 WITH ALLTRIM(STR(VAL(年休假天数)+VAL(上年未休),10,2))
    REPLACE  合计 WITH ALLTRIM(STR(VAL(一月)+VAL(二月)+VAL(三月)+VAL(四月)+VAL(五月)+VAL(六月)+VAL(七月)+VAL(八月)+VAL(九月)+VAL(十月)+VAL(十一月)+VAL(十二月),10,2))
    REPLACE  年休假剩余 WITH ALLTRIM(STR(VAL(本年应休)-VAL(合计)))
ENDSCAN
BROWSE
FUNCTION f工作年限(工作时间)
当前总月份=YEAR(DATE())*12+MONTH(DATE())
参加工作总月份=VAL(LEFT(ALLTRIM(m.工作时间),4))*12+VAL(RIGHT(ALLTRIM(m.工作时间),2))
f工作年限=ALLTRIM(STR(INT((当前总月份-参加工作总月份)/12)))
RETURN f工作年限
ENDFUNC
FUNCTION f年休假天数(工作年限)
f年休假天数=""
DO CASE
CASE VAL(m.工作年限)>=20
    f年休假天数="15"
CASE VAL(m.工作年限)>=10
    f年休假天数="10"
CASE VAL(m.工作年限)>=1
    f年休假天数="5"
ENDCASE
RETURN f年休假天数
ENDFUNC



[ 本帖最后由 月沐庭轩 于 2012-11-15 17:40 编辑 ]

坚持学习vfp,QQ:306805680
2012-11-14 19:30
tlliqi
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:204
帖 子:15453
专家分:65956
注 册:2006-4-27
得分:0 
以下是引用wjp456789在2012-11-14 19:13:32的发言:

嗯。对了。。。
看起很长
其实我想用repl 语句更新需要统计的字段。不过没有成功。。。。
你的select就用的好
2012-11-14 20:03
tlliqi
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:204
帖 子:15453
专家分:65956
注 册:2006-4-27
得分:0 
以下是引用月沐庭轩在2012-11-14 19:30:18的发言:

我是用了replace语句。
USE 年休假汇总表
SCAN
    REPLACE  工作年限 WITH f工作年限(工作时间)
    REPLACE  年休假天数 WITH f年休假天数(工作年限)
    REPLACE  本年应休 WITH ALLTRIM(STR(VAL(年休假天数)+VAL(上年未休)))
    REPLACE  合计 WITH ALLTRIM(STR(VAL(一月)+VAL(二月)+VAL(三月)+VAL(四月)+VAL(五月)+VAL(六月)+VAL(七月)+VAL(八月)+VAL(九月)+VAL(十月)+VAL(十一月)+VAL(十二月)))
    REPLACE  年休假剩余 WITH ALLTRIM(STR(VAL(本年应休)-VAL(合计)))
ENDSCAN
BROWSE
FUNCTION f工作年限(工作时间)
当前总月份=YEAR(DATE())*12+MONTH(DATE())
参加工作总月份=VAL(LEFT(ALLTRIM(m.工作时间),4))*12+VAL(RIGHT(ALLTRIM(m.工作时间),2))
f工作年限=ALLTRIM(STR(INT((当前总月份-参加工作总月份)/12)))
RETURN f工作年限
ENDFUNC
FUNCTION f年休假天数(工作年限)
f年休假天数=""
DO CASE
CASE VAL(m.工作年限)>=20
    f年休假天数="15"
CASE VAL(m.工作年限)>=10
    f年休假天数="10"
CASE VAL(m.工作年限)>=1
    f年休假天数="5"
ENDCASE
RETURN f年休假天数
ENDFUNC
不错嘛
2012-11-14 20:04
qjbzjp
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:尧的故乡
等 级:贵宾
威 望:48
帖 子:1914
专家分:4397
注 册:2007-3-14
得分:2 
不知我理解的对不对:
REPLACE all 工作年限 WITH STR(YEAR(DATE())-int(VAL(工作时间)),4)
REPLACE ALL 年休假天数 WITH xj(工作时间,VAL(工作年限))
REPLACE ALL 本年应休 WITH TRANSFORM(VAL(上年未休)+VAL(年休假天数))
**其它的楼主应该会了

FUNCTION xj
PARAMETERS datez,datey
PRIVATE n,x,s
x=MONTH(date())-val(SUBSTR(datez,6,2))
IF x>0
    s=x/12
ELSE
    s=0
ENDIF
DO CASE
    CASE BETWEEN(datey,1,9)
         n=5*(1+s)
    CASE BETWEEN(datey,10,19)
         n=10*(1+s)
    CASE datey >19
         n=15*(1+s)
    OTHERWISE
         n=0
ENDCASE
RETURN STR(n,4,1)
ENDFUNC

相互学习,互相交流,共同提高。
2012-11-14 20:27
月沐庭轩
Rank: 9Rank: 9Rank: 9
来 自:京城
等 级:贵宾
威 望:17
帖 子:393
专家分:1106
注 册:2011-7-24
得分:0 
24楼,REPLACE all 工作年限 WITH STR(YEAR(DATE())-int(VAL(工作时间)),4)这句,在前面讨论时,已经证明不符合人性化,会让人觉得楼主个很抠门的老板。

坚持学习vfp,QQ:306805680
2012-11-14 20:46
月沐庭轩
Rank: 9Rank: 9Rank: 9
来 自:京城
等 级:贵宾
威 望:17
帖 子:393
专家分:1106
注 册:2011-7-24
得分:0 
19楼
以下是引用tlliqi在2012-11-14 19:07:00的发言:

SELECT 工号,姓名,部门名称,工作时间,进厂时间,岗位名称,;
     INT(YEAR(DATE())-VAL(SUBSTR(工作时间,1,4))-1) as 工作年限,;
     IIF(INT(YEAR(DATE())-VAL(SUBSTR(工作时间,1,4))-1)>=1 AND INT(YEAR(DATE())-VAL(SUBSTR(工作时间,1,4))-1)<10,5.00,;
     IIF(INT(YEAR(DATE())-VAL(SUBSTR(工作时间,1,4))-1)>=10 AND INT(YEAR(DATE())-VAL(SUBSTR(工作时间,1,4))-1)<20,10.00,;
     IIF(INT(YEAR(DATE())-VAL(SUBSTR(工作时间,1,4))-1)>=20,15.00,0))) as 年休假天数,;
    上年未休,一月,二月,三月,四月,五月,六月,七月,八月,九月,十月,十一月,十二月,;
    roun(VAL(allt(上年未休)),1)+int(IIF(INT(YEAR(DATE())-VAL(SUBSTR(工作时间,1,4))-1)>=1 AND INT(YEAR(DATE())-VAL(SUBSTR(工作时间,1,4))-1)<10,5.00,;
     IIF(INT(YEAR(DATE())-VAL(SUBSTR(工作时间,1,4))-1)>=10 AND INT(YEAR(DATE())-VAL(SUBSTR(工作时间,1,4))-1)<20,10.00,;
     IIF(INT(YEAR(DATE())-VAL(SUBSTR(工作时间,1,4))-1)>=20,15.00,0)))) as 本年应休,;
    VAL(一月)+VAL(二月)+VAL(三月)+VAL(四月)+VAL(五月)+VAL(六月)+VAL(七月)+VAL(八月)+VAL(九月)+VAL(十月)+VAL(十一月)+VAL(十二月) as 合计,;
    roun(VAL(上年未休),1)+roun(IIF(INT(YEAR(DATE())-VAL(SUBSTR(工作时间,1,4))-1)>=1 AND INT(YEAR(DATE())-VAL(SUBSTR(工作时间,1,4))-1)<10,5.00,;
     IIF(INT(YEAR(DATE())-VAL(SUBSTR(工作时间,1,4))-1)>=10 AND INT(YEAR(DATE())-VAL(SUBSTR(工作时间,1,4))-1)<20,10.00,;
     IIF(INT(YEAR(DATE())-VAL(SUBSTR(工作时间,1,4))-1)>=20,15.00,0))),1)-roun(VAL(一月)+VAL(二月)+VAL(三月)+VAL(四月)+VAL(五月)+VAL(六月)+VAL(七月)+VAL(八月)+VAL(九月)+VAL(十月)+VAL(十一月)+VAL(十二月),1) as 年休假剩余 FROM 年休假汇总表 INTO CURSOR lsb
BROWSE


是这样吧

“INT(YEAR(DATE())-VAL(SUBSTR(工作时间,1,4))-1) as 工作年限”这句,也好像不符合楼主后来提出的当前年月-参加工作年月的要求。不过符合一楼的要求了。

[ 本帖最后由 月沐庭轩 于 2012-11-14 20:56 编辑 ]

坚持学习vfp,QQ:306805680
2012-11-14 20:55
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:0 
以下是引用Kerberos在2012-11-14 15:04:22的发言:

不好意思,我贴出来的计算方法的确有问题,现在我更正一下,工作年限=当年的年月(含年份月份)-工作时间(含年份月份)-1
缺少日

坚守VFP最后的阵地
2012-11-14 21:13
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:2 
用休假天数建立一个数据表
年限          休假天数
>=1 and <10       5
>=10 and <20     10
>=20             15
再用UPDATE命令计算各位职工休假天数

坚守VFP最后的阵地
2012-11-14 21:18
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:0 
用VFP9中的ICASE()

坚守VFP最后的阵地
2012-11-14 21:23
wjp456789
Rank: 5Rank: 5
来 自:四川成都
等 级:职业侠客
威 望:1
帖 子:345
专家分:330
注 册:2012-6-25
得分:0 
以下是引用sdta在2012-11-14 21:13:10的发言:

缺少日

想歪了。。

我是来向高手学习的!
2012-11-14 21:57



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-387009-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.465544 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved