标题:获取记录中数值排列前N位的字段名称的组合
只看楼主
schtg
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:https://t.me/pump_upp
等 级:贵宾
威 望:67
帖 子:1355
专家分:2534
注 册:2012-2-29
结帖率:90%
已结贴  问题点数:50 回复次数:8 
获取记录中数值排列前N位的字段名称的组合
各位大侠,请帮忙,如何快速从数据表中的记录中获取其由大到小排序前3(并列也计入)的字段名称,并写入字段yh中(如图),因总记录有近20w条,谢谢!

创建测试数据
程序代码:
CREATE dbf tt(xm C(12),t1 n(5,1),t2 n(5,1),t3 n(5,1),t4 n(5,1),t5 n(5,1),t6 n(5,1),t7 n(5,1),t8 n(5,1),t9 n(5,1),yh C(20))
INSERT INTO tt values("AAA",51,71,56.7,51,11,30,41,70,22,"")
INSERT INTO tt values("AAB",52,78,56.7,89,12,38,48,79,28,"")
INSERT INTO tt values("AAC",53,56,53,81,13,53,45,39,25,"")
INSERT INTO tt values("AAD",54,54,56.7,49,14,31,46,19,22,"")
INSERT INTO tt values("AAE",55,48,56.7,89,15,33,43,29,26,"")
搜索更多相关主题的帖子: values 字段 INSERT 记录 INTO 
2023-03-11 09:04
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:25 
数组排序行不行

坚守VFP最后的阵地
2023-03-11 12:34
sam_jiang
Rank: 8Rank: 8
等 级:贵宾
威 望:10
帖 子:542
专家分:781
注 册:2021-10-13
得分:25 
给你写了关键的一段代码,求一个数组中最大的几位数:
你先建立一个数组,将需要找出的最大几个数的那些数放进去,然后调用下面这个函数,他就输出了,用逗号分隔:

PARAMETERS carray,ncount &&数组carray,调用时要在前面加@,几位数ncount
creturn=""
FOR j=1 TO ncount
    themaxnum=0 &&themaxnum=carray[1] 更好
    FOR i=1 TO ALEN(carray)
        lastnum=themaxnum &&这句没用
        themaxnum=MAX(themaxnum,carray[i])
    ENDFOR
    nindex=ASCAN(carray,themaxnum)
    creturn=creturn+ALLTRIM(transform(carray[nindex]))+","
    if nindex>0 &&这句没用
        ADEL(carray,nindex)
        DIMENSION carray[ALEN(carray)-1]
    endif  &&这句没用
ENDFOR
RETURN LEFT(creturn,LEN(creturn)-1)

举例:

CLEAR
DIMENSION array1[10]
FOR i=1 TO 10
    array1[i]=RAND()*100
    ?array1[i]
endf
?maxnum(@array1,3)

[此贴子已经被作者于2023-3-11 16:03编辑过]

2023-03-11 15:28
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:0 
程序代码:
CREATE dbf tt(xm C(12),t1 n(5,1),t2 n(5,1),t3 n(5,1),t4 n(5,1),t5 n(5,1),t6 n(5,1),t7 n(5,1),t8 n(5,1),t9 n(5,1),yh C(20))
INSERT INTO tt values("AAA",51,71,56.7,51,11,30,41,70,22,"")
INSERT INTO tt values("AAB",52,78,56.7,89,12,38,48,79,28,"")
INSERT INTO tt values("AAC",53,56,53,81,13,53,45,39,25,"")
INSERT INTO tt values("AAD",54,54,56.7,49,14,31,46,19,22,"")
INSERT INTO tt values("AAE",55,48,56.7,89,15,33,43,29,26,"")
LOCAL aa[FCOUNT()-2, 2]
FOR ln = 1 TO FCOUNT()-2
    aa[ln,1] = "T" + TRANSFORM(ln)
    aa[ln,2] = 0.0
ENDFOR
SCAN
    = ACOPY(aa,bb)
    SCATTER FIELDS T1, T2, T3, T4, T5, T6, T7, T8, T9 TO cc
    FOR ln = 1 TO ALEN(cc)
        bb[ln, 2] = cc[ln]
    ENDFOR
    = ASORT(bb,2,ALEN(bb),1)
    lnmc = 1
    lnsj = bb[1,2]
    lcStr = bb[1,1]
    FOR ln = 2 TO ALEN(bb,1)
        IF bb[ln,2] = lnsj
        ELSE
            lnmc = lnmc + 1
        ENDIF
        IF lnmc > 3
            EXIT 
        ENDIF
        lcStr = lcStr + "," + bb[ln,1]
        lnsj = bb[ln,2]
    ENDFOR
    REPLACE yh WITH lcStr
ENDSCAN
BROWSE  



坚守VFP最后的阵地
2023-03-11 15:32
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:0 
将4楼代码简化如下
程序代码:
CREATE dbf tt(xm C(12),t1 n(5,1),t2 n(5,1),t3 n(5,1),t4 n(5,1),t5 n(5,1),t6 n(5,1),t7 n(5,1),t8 n(5,1),t9 n(5,1),yh C(20))
INSERT INTO tt values("AAA",51,71,56.7,51,11,30,41,70,22,"")
INSERT INTO tt values("AAB",52,78,56.7,89,12,38,48,79,28,"")
INSERT INTO tt values("AAC",53,56,53,81,13,53,45,39,25,"")
INSERT INTO tt values("AAD",54,54,56.7,49,14,31,46,19,22,"")
INSERT INTO tt values("AAE",55,48,56.7,89,15,33,43,29,26,"")
LOCAL aa[FCOUNT()-2, 2]
FOR ln = 1 TO FCOUNT()-2
    aa[ln,1] = "T" + TRANSFORM(ln)
    aa[ln,2] = 0.0
ENDFOR
SCAN
    = ACOPY(aa,bb)
    SCATTER FIELDS T1, T2, T3, T4, T5, T6, T7, T8, T9 TO cc
    FOR ln = 1 TO ALEN(cc)
        bb[ln, 2] = cc[ln]
    ENDFOR
    = ASORT(bb,2,ALEN(bb),1)
    lnsj = bb[3,2]
    lcStr = bb[1,1] + "," + bb[2,1] + "," + bb[3,1]
    * 从数组第四行开始与前面行的数组元素比较
    FOR ln = 4 TO ALEN(bb, 1)
        IF     bb[ln, 2] = lnsj
            lcStr = lcStr + "," + bb[ln,1]
        ELSE
            EXIT 
        ENDIF
    ENDFOR
    REPLACE yh WITH lcStr
    lnsj = bb[ln,2]
ENDSCAN
BROWSE 


坚守VFP最后的阵地
2023-03-11 15:53
schtg
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:https://t.me/pump_upp
等 级:贵宾
威 望:67
帖 子:1355
专家分:2534
注 册:2012-2-29
得分:0 
回复 2楼 sdta
行哈,谢谢!
2023-03-11 16:44
schtg
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:https://t.me/pump_upp
等 级:贵宾
威 望:67
帖 子:1355
专家分:2534
注 册:2012-2-29
得分:0 
回复 4楼 sdta
谢谢,我稍完一些在电脑上试一下。
2023-03-11 16:45
schtg
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:https://t.me/pump_upp
等 级:贵宾
威 望:67
帖 子:1355
专家分:2534
注 册:2012-2-29
得分:0 
回复 5楼 sdta
谢谢,看结果没有问题的哈,谢谢!
2023-03-11 16:45
schtg
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:https://t.me/pump_upp
等 级:贵宾
威 望:67
帖 子:1355
专家分:2534
注 册:2012-2-29
得分:0 
回复 3楼 sam_jiang
谢谢,稍晚一点试一下哈。
2023-03-11 16:46



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-511509-1-1.html




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

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