注册 登录
编程论坛 VFP论坛

再求助:按日历统计数据

tjdeming 发布于 2023-07-09 18:17, 1044 次点击
各位老师:原表ffff为按日历记录请假情况,num为编号,ny为年月,j1-j31为日历
想得到gg表的结果,即某编号人员从某年月的几号至某年月的几号并统计合计数。
(只统计填写“探”的结果)用vfp6.0
增加年度字段,按月统计 “探”记录数,按编号,年度,ny,开始月日,结束月日,合计表形式输出
(若涉及跨月最好能折成一条记录,不跨月的都单独成一条记录)
只有本站会员才能查看附件,请 登录

谢谢!!!
12 回复
#2
sdta2023-07-10 00:47
结果与上一帖有何区别,GG表中看不出来。
#3
tjdeming2023-07-10 05:41
回复 2楼 sdta
早上好
不好意思,没有细说。是这样的:我在ffff中增加了一条编号为5985人员年月为202306的记录,原统计结束gg表中是一条记录。所以我想在gg表中增加一个字段年度加以区别。
只有本站会员才能查看附件,请 登录


[此贴子已经被作者于2023-7-10 06:04编辑过]

#4
sdta2023-07-10 09:43
是这个结果吗
只有本站会员才能查看附件,请 登录
#5
tjdeming2023-07-10 11:04
回复 4楼 sdta
5985编号应有二条记录是合理的
#6
sdta2023-07-10 13:06
以下是引用tjdeming在2023-7-10 11:04:27的发言:

5985编号应有二条记录是合理的

无语
#7
sdta2023-07-10 13:11
同一年的数据统计在同一条记录中,不同年的数据分开统计,是这个意思?
#8
sdta2023-07-10 13:21
这种效果?
只有本站会员才能查看附件,请 登录
#9
csyx2023-07-10 14:39
没用过 vfp6,不清楚是否允许合成一条 sql 语句来执行,这里分成多条 sql 应该允许吧?
程序代码:
cc = ''
For ii = 1 to 31
    cc = cc + '+j' + Ltrim(Str(ii))
EndFor
cc = Substr(cc,2)
Select num, nina, yue, &cc as jx from ffff into cursor ggg
Select num, nina, yue, Occurs('',jx) hj, At('',jx) st, Rat('',jx) et from ggg into cursor ggg
Select num, nina, yue, Sum(hj) as hj, Min(st) st, Max(et) et from ggg where st > 0 group by num,nina,yue into cursor ggg
Select num, nina, yue, hj, 1+Int((st-1)/4) st, 1+Int((et-1)/4) et from ggg into cursor ggg
Select num, nina, hj, Date(nina,yue,st) st, Date(nina,yue,et) et from ggg into cursor ggg
Select num, nina, Min(st) as st, Max(et) et, Sum(hj) jh from ggg group by num, nina into cursor ggg
Browse

#10
tjdeming2023-07-10 16:05
回复 8楼 sdta
谢谢你,是的
#11
sdta2023-07-10 17:27
程序代码:
CLOSE DATABASES
USE gg IN 0
ZAP
SELECT num, nina FROM ffff GROUP BY 1, 2 INTO CURSOR temp

SCAN
    SELECT * FROM ffff WHERE num = temp.num AND nina = temp.nina ORDER BY num, ny INTO CURSOR temp1
    lncnt = 0
    SCAN
        FOR ln = 5 TO FCOUNT() - 2
            IF ALLTRIM(EVALUATE(FIELD(ln))) == "探"
                lncnt = lncnt + 1
                IF lncnt = 1
                    lcny = TRANSFORM(ny) + PADL(SUBSTR(FIELD(ln), 2), 2, "0")
                ENDIF
                lcny1 = TRANSFORM(ny) + PADL(SUBSTR(FIELD(ln), 2), 2, "0")
            ENDIF
        ENDFOR
    ENDSCAN
    lcny = CHRTRAN("abcd,ef,gh", 'abcdefgh', lcny)
    lcny1 = CHRTRAN("abcd,ef,gh", 'abcdefgh', lcny1)
    INSERT INTO gg VALUES (temp.num, VAL(LEFT(lcny1, 4)),DATE(&lcny), DATE(&lcny1), lncnt)
ENDSCAN
SELECT gg
BROWSE
#12
tjdeming2023-07-11 19:50
回复 9楼 csyx
感谢!感谢!感谢!
程序,6.0正常运行。
#13
tjdeming2023-07-11 19:55
回复 11楼 sdta
感谢!感谢!感谢!
按年分类统计(年内的不论跨月与否都作为一条记录)
再次感谢。
1