注册 登录
编程论坛 VFP论坛

包含字符的数量统计

chychychy 发布于 2024-05-16 18:16, 634 次点击
只有本站会员才能查看附件,请 登录

只有本站会员才能查看附件,请 登录
只有本站会员才能查看附件,请 登录
只有本站会员才能查看附件,请 登录

按表1中km来统计表2中包含表1km信息的不同学校数据,生成tjb,虽然以前求助过类似的,但是一是没学会循环统计并写入新表,二是被包含难住了。

[此贴子已经被作者于2024-5-16 18:23编辑过]

12 回复
#2
schtg2024-05-16 18:55
回复 楼主 chychychy
分类汇总吧
这样,行吗?
只有本站会员才能查看附件,请 登录

程序代码:
select bmddm,sum(iif([物理]$xkkmzhmc,1,0)) as 物理,;
             sum(iif([化学]$xkkmzhmc,1,0)) as 化学,;
             sum(iif([生物]$xkkmzhmc,1,0)) as 生物,;
             sum(iif([政治]$xkkmzhmc,1,0)) as 政治,;
             sum(iif([历史]$xkkmzhmc,1,0)) as 历史,;
             sum(iif([地理]$xkkmzhmc,1,0)) as 地理 ;
             from 表2 group by bmddm union ;
             select [合计],;
                sum(iif([物理]$xkkmzhmc,1,0)) as 物理,;
                sum(iif([化学]$xkkmzhmc,1,0)) as 化学,;
                sum(iif([生物]$xkkmzhmc,1,0)) as 生物,;
                sum(iif([政治]$xkkmzhmc,1,0)) as 政治,;
                sum(iif([历史]$xkkmzhmc,1,0)) as 历史,;
                sum(iif([地理]$xkkmzhmc,1,0)) as 地理 ;
                from 表2 into cursor ls
select ls
browse


[此贴子已经被作者于2024-5-17 05:54编辑过]

#3
chychychy2024-05-16 19:48
回复 2楼 schtg
非常正确[强]
这样设计更加合理,请教程序语句学习

[此贴子已经被作者于2024-5-16 23:01编辑过]

#4
sdta2024-05-16 20:30
程序代码:
CLOSE DATABASES
USE Tjb IN 0
FOR ln = 2 TO FCOUNT()
    BLANK FIELDS (FIELD(ln)) ALL
ENDFOR
INDEX ON Km TAG Km
USE Chy2 IN 0 && 原表名为 表2.DBF
SELECT Chy2
SCAN
    FOR ln = 1 TO ALINES(laKm, Xkkmzhmc, 5, "、")
        IF SEEK(laKm[ln]+SPACE(8-LEN(laKm[ln])), "Tjb", "Km") = .T.
            REPLACE Zong WITH Zong+1, ("N"+ALLTRIM(Chy2.Bmddm)) WITH EVALUATE("N"+ALLTRIM(Chy2.Bmddm)) + 1 IN Tjb
        ENDIF
    ENDFOR
ENDSCAN
SELECT Tjb
SET ORDER TO
DELETE TAG Km.CDX
BROWSE
#5
chychychy2024-05-16 22:24
回复 4楼 sdta
完全正确,目前还是拿来主义,scan中间的for if repl还没理解,下次还是不会用,得好好消化
CLOSE DATABASES
USE 表1 ALIAS CHY1 IN 0
USE 表2 ALIAS chy2 IN 0
sELECT DISTINCT bmddm    FROM chy2 INTO ARRAY arr_bmddm
cmd = "CREATE CURSOR TJB (km c(8),zong I"
FOR i=1 TO ALEN(arr_bmddm)
    cmd = cmd + "," + "N" + arr_bmddm[i] + " I"
ENDFOR
cmd = cmd + ")"
EXECSCRIPT(cmd)

APPEND FROM chy1&&&提示chy1不存在,用原名表1才可以,上面有别名了,为什么提示错误
INDEX ON Km TAG Km
SELECT Chy2
SCAN
    FOR ln = 1 TO ALINES(laKm, Xkkmzhmc, 5, "、")
        IF SEEK(laKm[ln]+SPACE(8-LEN(laKm[ln])), "Tjb", "Km") = .T.
            REPLACE Zong WITH Zong+1, ("N"+ALLTRIM(Chy2.Bmddm)) WITH EVALUATE("N"+ALLTRIM(Chy2.Bmddm)) + 1 IN Tjb
        ENDIF
    ENDFOR
ENDSCAN
SELECT Tjb
SET ORDER TO
DELETE TAG Km.CDX


[此贴子已经被作者于2024-5-16 22:34编辑过]

#6
chychychy2024-05-16 22:26
回复 4楼 sdta
我设想的tjb是自动判断生产,参考您的代码修改了一下。但环境不同了,这种环境下明显感觉不如2楼的合理和好用
#7
sdta2024-05-16 22:33
USE 表1 ALIAS CHY1 IN 0
USE 表2 ALIAS chy2 IN 0
......................
EXECSCRIPT(cmd)
* 看下工作区是否被关闭
? alias("chy1")
? alias("chy2")
APPEND FROM chy1
#8
chychychy2024-05-16 22:46
回复 7楼 sdta
是打开的,我测试无论打开还是关闭表1,appe from 是文件原名都可以,别名不行不是appe from 只能是文件名不能是别名
#9
sdta2024-05-17 00:50
以下是引用chychychy在2024-5-16 22:46:44的发言:

是打开的,我测试无论打开还是关闭表1,appe from 是文件原名都可以,别名不行不是appe from 只能是文件名不能是别名

帮助文件中指定的是文件名,不是别名。
#10
schtg2024-05-17 05:41
回复 3楼 chychychy
代码可见2楼,可能不是最佳语句
我也有这方面的工作,欢迎交流

[此贴子已经被作者于2024-5-17 05:57编辑过]

#11
chychychy2024-05-17 08:20
回复 10楼 schtg
谢谢,对我这样水平更好理解一点,这样其实您以前分享过,不过我没学会举一反三
#12
吹水佬2024-05-17 12:45

程序代码:

SELECT DISTINCT bmddm,;
    000000 物理,;
    000000 化学,;
    000000 生物,;
    000000 政治,;
    000000 历史,;
    000000 地理;
    FROM 表2 INTO CURSOR tj READWRITE
SELECT tj
INDEX on bmddm TAG tj_bmddm
SELECT 表2
SET RELATION TO bmddm INTO "tj"
SCAN
    IF "物理" $ xkkmzhmc
        REPLACE tj.物理 WITH tj.物理 + 1
    ENDIF
    IF "化学" $ xkkmzhmc
        REPLACE tj.化学 WITH tj.化学 + 1
    ENDIF
    IF "生物" $ xkkmzhmc
        REPLACE tj.生物 WITH tj.生物 + 1
    ENDIF
    IF "政治" $ xkkmzhmc
        REPLACE tj.政治 WITH tj.政治 + 1
    ENDIF
    IF "历史" $ xkkmzhmc
        REPLACE tj.历史 WITH tj.历史 + 1
    ENDIF
    IF "地理" $ xkkmzhmc
        REPLACE tj.地理 WITH tj.地理 + 1
    ENDIF
ENDSCAN
SELECT * FROM tj


#13
chychychy2024-05-18 09:06
回复 12楼 吹水佬
谢谢,非常正确,对我这样初级水平浅显好理解掌握,我在您语句末尾加上这句合计也有了
SELECT * FROM tj UNION ALL SELECT '合计',SUM(物理),SUM(化学),SUM(生物),SUM(政治),SUM(历史),SUM(地理) FROM tj
1