注册 登录
编程论坛 VFP论坛

请教各位大大,比较某列中各数字的大小,有什么方法?

shonken 发布于 2023-06-13 17:46, 1165 次点击
程序代码:

CREATE CURSOR 测试表 (姓名 C(8),得分,项目1 Y,项目2 Y,项目3 Y)
INSERT INTO 测试表 VALUES ("AAA",0,1,3,2)
INSERT INTO 测试表 VALUES ("BBB",0,2,2,3)
INSERT INTO 测试表 VALUES ("CCC",0,2,2,4)
INSERT INTO 测试表 VALUES ("DDD",0,3,4,5)

如:比较“项目3”列中2,3,4,5四个数字,最小的得1分,第二得2分,第三得3分.....,同数字占一个位置
结果:AAA:1+1+1=3,BBB:2+1+2=5,CCC:2+1+3=6,DDD:3+3+4=10
将结果赋值得分,再按得分从小到大排序
10 回复
#2
sdta2023-06-13 18:59
看不明白楼主的说明,数字相同大小如何界定
#3
吹水佬2023-06-13 19:02
AAA:1+2+1=4
#4
shonken2023-06-13 21:10
是同一列比大小,最小的得1分,第二得2分。如AAA为例,1是项目1这列中是最小的,得1分,3在项目2这列是第二小的,得2分,2在项目3这列中是最小的,得1分。1+2+1=4
数字相同,如项目1和项目2的
#5
shonken2023-06-13 23:18
CREATE CURSOR 测试表 (姓名 C(8),得分 Y,项目1 Y,项目2 Y,项目3 Y)
INSERT INTO 测试表 VALUES ("AAA",0,1,3,2)
INSERT INTO 测试表 VALUES ("BBB",0,2,2,3)
INSERT INTO 测试表 VALUES ("CCC",0,2,2,4)
INSERT INTO 测试表 VALUES ("DDD",0,3,4,5)

一时匆忙,忘记得分的设定....
#6
吹水佬2023-06-14 06:15
可用数组排序搜索定位就是得第几
#7
sdta2023-06-14 08:29
程序代码:
CREATE CURSOR 测试表 (姓名 C(8),得分 n(2),项目1 Y,项目2 Y,项目3 Y)
INSERT INTO 测试表 VALUES ("BBB",0,2,2,3)
INSERT INTO 测试表 VALUES ("AAA",0,1,3,2)
INSERT INTO 测试表 VALUES ("CCC",0,2,2,4)
INSERT INTO 测试表 VALUES ("DDD",0,3,4,5)
AFIELDS(afld)
lcStr = "姓名, 得分"
lcStr1 = SPACE(0)
FOR ln = 3 TO FCOUNT()
    lcStr = lcStr + ", " + afld[ln, 1] + ", " + " 00 xm" + TRANSFORM(ln - 2)
    lcStr1 = lcStr1 + "+ xm" + TRANSFORM(ln - 2)
ENDFOR
SELECT &lcStr FROM 测试表 INTO CURSOR csb READWRITE
SELECT 测试表
FOR ln = 3 TO FCOUNT()
    lcfld = FIELD(ln)
    lcxm = "xm" + TRANSFORM(ln - 2)
    SELECT xm, RECNO() nrec FROM (SELECT &lcfld xm FROM 测试表 GROUP BY 1) aa INTO CURSOR temp
    UPDATE csb SET &lcxm = nrec FROM temp WHERE &lcfld = xm
    SELECT 测试表   
ENDFOR
SELECT csb
REPLACE 得分 WITH EVALUATE(lcStr1) ALL
SELECT * FROM csb ORDER BY 得分
#8
laowan0012023-06-14 09:06
程序代码:

LOCAL ii,xfield
CREATE CURSOR 测试表 (姓名 C(8),得分 n(2),项目1 Y,项目2 Y,项目3 Y)
INSERT INTO 测试表 VALUES ("BBB",0,2,2,3)
INSERT INTO 测试表 VALUES ("AAA",0,1,3,2)
INSERT INTO 测试表 VALUES ("CCC",0,2,2,4)
INSERT INTO 测试表 VALUES ("DDD",0,3,4,5)

xfile = SYS(2015)
FOR ii=1 TO 3
    xfield = '项目'+TRANSFORM(ii)
   
    SELECT distinct &xfield,CAST(0 as int) rec FROM 测试表 order by &xfield INTO CURSOR &xfile READWRITE
    UPDATE &xfile SET rec=RECNO()
   
    UPDATE a SET a.得分=a.得分+b.rec FROM 测试表 a,&xfile b WHERE a.&xfield=b.&xfield
   
    USE IN &xfile
ENDFOR

SELECT * FROM 测试表




[此贴子已经被作者于2023-6-14 09:08编辑过]

#9
shonken2023-06-14 09:49
谢谢sdta版主和laowan001版主,问题解决
#10
吹水佬2023-06-14 09:57
只有本站会员才能查看附件,请 登录

程序代码:

CREATE CURSOR 测试表 (姓名 C(8),得分 I,项目1 I,项目2 I,项目3 I)
INSERT INTO 测试表 VALUES ("AAA",0,1,3,2)
INSERT INTO 测试表 VALUES ("BBB",0,2,2,3)
INSERT INTO 测试表 VALUES ("CCC",0,2,2,4)
INSERT INTO 测试表 VALUES ("DDD",0,3,4,5)

UPDATE 测试表 SET 得分=fun(1)+fun(2)+fun(3)
SELECT * FROM 测试表

FUNCTION fun(num)
    vxm = EVALUATE("测试表.项目"+TRANSFORM(num))
    cxm = "项目"+TRANSFORM(num)
    SELECT DISTINCT &cxm FROM 测试表 ORDER BY &cxm INTO ARRAY arr
    RETURN ASCAN(arr,vxm)
ENDFUNC
#11
shonken2023-06-15 09:54
以下是引用吹水佬在2023-6-14 09:57:27的发言:



CREATE CURSOR 测试表 (姓名 C(8),得分 I,项目1 I,项目2 I,项目3 I)
INSERT INTO 测试表 VALUES ("AAA",0,1,3,2)
INSERT INTO 测试表 VALUES ("BBB",0,2,2,3)
INSERT INTO 测试表 VALUES ("CCC",0,2,2,4)
INSERT INTO 测试表 VALUES ("DDD",0,3,4,5)

UPDATE 测试表 SET 得分=fun(1)+fun(2)+fun(3)
SELECT * FROM 测试表

FUNCTION fun(num)
    vxm = EVALUATE("测试表.项目"+TRANSFORM(num))
    cxm = "项目"+TRANSFORM(num)
    SELECT DISTINCT &cxm FROM 测试表 ORDER BY &cxm INTO ARRAY arr
    RETURN ASCAN(arr,vxm)
ENDFUNC



谢谢吹版提供其他的解决思路
1