| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 832 人关注过本帖
标题:按日历统计数据
只看楼主 加入收藏
tjdeming
Rank: 2
等 级:论坛游民
帖 子:429
专家分:54
注 册:2013-3-4
结帖率:90.14%
收藏
已结贴  问题点数:20 回复次数:15 
按日历统计数据
各位老师:原表ffff为按日历记录请假情况,num为编号,ny为年月,j1-j31为日历
想得到gg表的结果,即某编号人员从某年月的几号至某年月的几号并统计合计数。
(只统计填写“探”的结果)用vfp6.0
谢谢!!!
附件
555.rar (649 Bytes)


能实现吗?

[此贴子已经被作者于2023-7-6 23:15编辑过]

搜索更多相关主题的帖子: 统计 编号 年月 数据 日历 
2023-07-06 20:48
schtg
Rank: 12Rank: 12Rank: 12
来 自:Usa
等 级:贵宾
威 望:67
帖 子:1710
专家分:3318
注 册:2012-2-29
收藏
得分:4 
回复 楼主 tjdeming
使用数组,是方法之一,可能不是最优,仅供参考!
前面好像探讨过请假天数的统计、加班天数的统计,应该属于同一类型的吧。
程序代码:
close all
use ffff
go top
scan
   scatter fields j1,j2,j3,j4,j5,j6,j7,j8,j9,j10,j11,j12,j13,j14,j15,j16,j17,j18,j19,j20,j21,j22,j23,j24,j25,j26,j27,j28,j29,j30,j31 to arr  && 修改此处,可以限定统计日期范围
   nNum = 0
   zjs = alen(arr)
   for i = 1 to zjs
       if [] $ arr(m.i)
          nNum = 1 + nNum
       endif
   endfor
   replace 备注 with alltrim(str(nNum))
endscan
select ffff
browse

图片附件: 游客没有浏览图片的权限,请 登录注册


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

2023-07-07 06:14
tjdeming
Rank: 2
等 级:论坛游民
帖 子:429
专家分:54
注 册:2013-3-4
收藏
得分:0 
回复 2楼 schtg
谢谢你
我想对“探”统计的结果是Gg表的形式。
2023-07-07 06:47
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43182
注 册:2014-5-20
收藏
得分:8 
图片附件: 游客没有浏览图片的权限,请 登录注册

程序代码:
USE ffff
SCAN 
    SCATTER TO arr
    ret = ""
    ds = 0
    sd = ASCAN(arr,"探  ")
    ns = sd
    DO WHILE BETWEEN(ns,1,ALEN(arr))
        DO WHILE arr[ns]=="探  "
            ds = ds+1 
            ns = ns+1
        ENDDO
        ret = ret + "," + PADL(sd-2,2,"0") + "-" + PADL(ns-3,2,"0")
        sd = ASCAN(arr,"探  ",ns)
        ns = sd
    ENDDO
    ? arr[1],arr[2], SUBSTR(ret,2), ds
ENDSCAN
2023-07-07 11:34
tjdeming
Rank: 2
等 级:论坛游民
帖 子:429
专家分:54
注 册:2013-3-4
收藏
得分:0 
回复 4楼 吹水佬
谢谢你!谢谢你!谢谢你!
想达成Gg表有难度,估计要二次数据处理,看来难度是跨月的
2023-07-07 11:41
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:8 
程序代码:
CLOSE DATABASES 
USE gg IN 0
ZAP 
SELECT DISTINCT num FROM ffff INTO CURSOR temp
SCAN
    SELECT * FROM ffff WHERE num = temp.num ORDER BY num, ny INTO CURSOR temp1
    lncnt = 0
    SCAN 
        FOR ln = 3 TO FCOUNT() - 1
            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 = CTOD(CHRTRAN("abcd-ef-gh", 'abcdefgh', lcny))
    lcny1 = CTOD(CHRTRAN("abcd-ef-gh", 'abcdefgh', lcny1))
    INSERT INTO gg VALUES (temp.num, lcny, lcny1, lncnt)
ENDSCAN 
SELECT gg
BROWSE 

图片附件: 游客没有浏览图片的权限,请 登录注册


[此贴子已经被作者于2023-7-7 11:44编辑过]


坚守VFP最后的阵地
2023-07-07 11:42
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43182
注 册:2014-5-20
收藏
得分:0 
以下是引用tjdeming在2023-7-7 11:41:20的发言:

谢谢你!谢谢你!谢谢你!
想达成Gg表有难度,估计要二次数据处理,看来难度是跨月的

4楼的代码已经考虑到同月跨月分段休假,可以再做个分类统计,同一人在不同月的数据求和就是了。
另:这类数据统计,原表数据结构要优化一下应该好统计些。
2023-07-07 11:50
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
    lcny = CTOD(CHRTRAN("abcd-ef-gh", 'abcdefgh', lcny))
    lcny1 = CTOD(CHRTRAN("abcd-ef-gh", 'abcdefgh', lcny1))
    INSERT INTO gg VALUES (temp.num, lcny, lcny1, lncnt)
改为下面代码看下效果
    lcny = CHRTRAN("abcd,ef,gh", 'abcdefgh', lcny)
    lcny1 = CHRTRAN("abcd,ef,gh", 'abcdefgh', lcny1)
    INSERT INTO gg VALUES (temp.num, DATE(&lcny), DATE(&lcny1), lncnt)

坚守VFP最后的阵地
2023-07-07 11:51
tjdeming
Rank: 2
等 级:论坛游民
帖 子:429
专家分:54
注 册:2013-3-4
收藏
得分:0 
回复 8楼 sdta
谢谢你!谢谢你!谢谢你!
-气呵成
2023-07-07 12:00
tjdeming
Rank: 2
等 级:论坛游民
帖 子:429
专家分:54
注 册:2013-3-4
收藏
得分:0 
感谢二位大佬出手相助,我逐句学习。
2023-07-07 12:01
快速回复:按日历统计数据
数据加载中...
 
   



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

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