注册 登录
编程论坛 VFP论坛

求,列出每列小于3的列

杂七杂八 发布于 2021-07-29 18:01, 4298 次点击
求助,1、查询一个人每列小于3的列,行吗?
      2、查询出所有小于3的列,能做到吗?
只有本站会员才能查看附件,请 登录

谢谢!
18 回复
#2
sdta2021-07-29 19:29
判断最小值是否小于3即可
#3
杂七杂八2021-07-29 19:58
回复 2楼 sdta
谢谢,我没表达清楚,是这个意思:查某人Y1至Y12中有几个小于3的列就列出几个列
如张三:Y3,Y4
  赵七:Y2,Y3,Y8,Y10,Y11
#4
sdta2021-07-29 22:08
为空是不是小于3
#5
sdta2021-07-29 22:13
程序代码:

CLEAR
CLOSE DATABASES
USE bb
SCAN
    lcStr = ALLTRIM(xm)
    FOR lnj = 2 TO FCOUNT()
        IF BETWEEN(EVALUATE(FIELD(lnj)), 1, 2)
            lcStr = lcStr + ", " + FIELD(lnj)
        ENDIF
    ENDFOR
    ? lcStr
ENDSCAN
BROWSE

#6
杂七杂八2021-07-30 06:20
想要结果是
只有本站会员才能查看附件,请 登录
只有本站会员才能查看附件,请 登录
只有本站会员才能查看附件,请 登录

谢谢
#7
schtg2021-07-30 06:36
回复 6楼 杂七杂八
5楼正解!
只有本站会员才能查看附件,请 登录
#8
sdta2021-07-30 08:28
程序代码:

CLEAR
CLOSE DATABASES
USE C:\Users\Administrator\Desktop\bb\bb IN 0 && 路径自己设置
SCAN
    lcStr = 'xm'
    lcXm = ALLTRIM(xm)
    FOR lnj = 2 TO FCOUNT()
        IF BETWEEN(EVALUATE(FIELD(lnj)), 1, 2)
            lcStr = lcStr + ", " + FIELD(lnj)
        ENDIF
    ENDFOR
     BROWSE FIELDS &lcStr FOR ALLTRIM(xm) == lcxm
ENDSCAN


[此贴子已经被作者于2021-7-30 08:30编辑过]

#9
sdta2021-07-30 08:33
以下是引用杂七杂八在2021-7-29 18:01:45的发言:

求助,1、查询一个人每列小于3的列,行吗?
      2、查询出所有小于3的列,能做到吗?
谢谢!

问题应该是:列出每条记录小于3的列。
以后提问题要一次性说清楚具体要求,不要让别人产生误解;否则即浪费自己的时间,也浪费别人的时间。
#10
吹水佬2021-07-30 09:40
只有本站会员才能查看附件,请 登录

这样存放数据的结果,每个人的数据结构有可能是不同。
#11
wengjl2021-07-30 10:27
我关心这样的统计有什么用途?
#12
wengjl2021-07-30 10:44
只有本站会员才能查看附件,请 登录
#13
杂七杂八2021-07-30 18:10
回复 9楼 sdta
真诚致歉!我的表述
真心感谢!你的代码
#14
杂七杂八2021-07-30 18:13
回复 10楼 吹水佬
谢谢!看来,不可能全部列出在一个表中,只能逐条显示。
#15
杂七杂八2021-07-30 18:18
回复 11楼 wengjl
查询出全年某一个人低于3的月份,为以后改进提供数据说明。
#16
杂七杂八2021-07-30 18:19
能改用VFP6.0的代码吗?
#17
sdta2021-07-30 20:03
VFP6.0代码
程序代码:

CLOSE DATABASES
CREATE CURSOR test (xm c(8), y1 n(2), y2 n(2), y3 n(2), y4 n(2), y5 n(2), y6 n(2), y7 n(2), y8 n(2), y9 n(2), y10 n(2), y11 n(2), y12 n(2))
USE C:\Users\Administrator\Desktop\bb\bb IN 0
SELECT bb
SCAN
    lcStr = 'xm'
    lcXm = ALLTRIM(xm)
    FOR lnj = 2 TO FCOUNT()
        IF BETWEEN(EVALUATE(FIELD(lnj)), 1, 2)
            lcStr = lcStr + ", " + FIELD(lnj)
        ENDIF
    ENDFOR
    SELECT &lcStr FROM bb WHERE ALLTRIM(xm) == lcxm INTO CURSOR temp
    SELECT test
    APPEND FROM DBF("temp")
ENDSCAN
USE IN temp
SELECT test
BROWSE

#18
吹水佬2021-07-31 07:05
只有本站会员才能查看附件,请 登录

程序代码:
ret = "Y1:Y2:Y3:Y4:Y5:Y6:Y7:Y8:Y9:Y10:Y11:Y12:"
ret2 = ret
SELECT *, SPACE(70) 低于3 FROM bb INTO CURSOR tmp READWRITE
SCAN
    ret1 = ret
    FOR i=1 TO 12
        cf = "Y"+TRANSFORM(i)
        ny = EVALUATE(cf)
        IF ny < 3
            ret1 = STRTRAN(ret1, cf+":", ","+cf+":"+TRANSFORM(ny))
        ELSE
            ret1 = STRTRAN(ret1, cf+":", "")
            IF AT(cf+":",ret2) > 0
                ret2 = STRTRAN(ret2, cf+":", "")
            ENDIF
        ENDIF
    ENDFOR
    REPLACE 低于3 WITH SUBSTR(ret1,2)
ENDSCAN
INSERT INTO tmp (xm,低于3) VALUES ("所有人", TRIM(ret2,":"))
SELECT * FROM tmp
RETURN
#19
gs25367856782021-07-31 13:16
真象11楼朋友讲的,这样的统计,意义何在?
1