| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 662 人关注过本帖
标题:获取记录中数值排列前N位的字段名称的组合
只看楼主 加入收藏
schtg
Rank: 12Rank: 12Rank: 12
来 自:Usa
等 级:贵宾
威 望:67
帖 子:1790
专家分:3389
注 册:2012-2-29
结帖率:93.55%
收藏
已结贴  问题点数: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
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9848
专家分:27241
注 册:2012-2-5
收藏
得分:25 
数组排序行不行

坚守VFP最后的阵地
2023-03-11 12:34
sam_jiang
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:806
专家分:1231
注 册: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
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9848
专家分:27241
注 册: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
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9848
专家分:27241
注 册: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: 12Rank: 12Rank: 12
来 自:Usa
等 级:贵宾
威 望:67
帖 子:1790
专家分:3389
注 册:2012-2-29
收藏
得分:0 
回复 2楼 sdta
行哈,谢谢!
2023-03-11 16:44
schtg
Rank: 12Rank: 12Rank: 12
来 自:Usa
等 级:贵宾
威 望:67
帖 子:1790
专家分:3389
注 册:2012-2-29
收藏
得分:0 
回复 4楼 sdta
谢谢,我稍完一些在电脑上试一下。
2023-03-11 16:45
schtg
Rank: 12Rank: 12Rank: 12
来 自:Usa
等 级:贵宾
威 望:67
帖 子:1790
专家分:3389
注 册:2012-2-29
收藏
得分:0 
回复 5楼 sdta
谢谢,看结果没有问题的哈,谢谢!
2023-03-11 16:45
schtg
Rank: 12Rank: 12Rank: 12
来 自:Usa
等 级:贵宾
威 望:67
帖 子:1790
专家分:3389
注 册:2012-2-29
收藏
得分:0 
回复 3楼 sam_jiang
谢谢,稍晚一点试一下哈。
2023-03-11 16:46
快速回复:获取记录中数值排列前N位的字段名称的组合
数据加载中...
 
   



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

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