标题:请教各位大大:有没有更好的方法实现筛选出当前记录中,N个项目中不为0的项 ...
只看楼主
shonken
Rank: 2
等 级:论坛游民
帖 子:95
专家分:21
注 册:2017-1-15
结帖率:86.67%
已结贴  问题点数:10 回复次数:5 
请教各位大大:有没有更好的方法实现筛选出当前记录中,N个项目中不为0的项目数,及将数值从大到小排序到一个临时表中
CREATE CURSOR 测试表 (项目1 Y,项目2 Y,项目3 Y,项目4 Y,项目5 Y,项目6 Y)
INSERT INTO 测试表 VALUES (23,0,11,33,0,25)
INSERT INTO 测试表 VALUES (23,10,21,43,0,15)
INSERT INTO 测试表 VALUES (23,0,0,53,0,55)

需要筛选出当前记录中,N个项目中不为0的项目数,及将数值从大到小排序到一个临时表中
结果:
记录2:  4个项目
项目数值
43
23
21
15

我用
Copy To Array gaTemp Fields Like 项目* Next 1   
也要5条语句才能实现,不知有没有更好的方法?
搜索更多相关主题的帖子: 项目 数值 方法 记录 测试 
2022-07-13 16:31
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:4 
程序代码:
CREATE CURSOR 测试表 (项目1 Y,项目2 Y,项目3 Y,项目4 Y,项目5 Y,项目6 Y)
INSERT INTO 测试表 VALUES (23,0,11,33,0,25)
INSERT INTO 测试表 VALUES (23,10,21,43,0,15)
INSERT INTO 测试表 VALUES (23,0,0,53,0,55)
SELECT * FROM 测试表 WHERE .F. INTO CURSOR 结果 READWRITE
SELECT 测试表
SCAN 
    SCATTER TO gaTemp 
    DIMENSION gaTemp[FCOUNT()]
    ASORT(gaTemp, 1, FCOUNT(), 1)
    DIMENSION gaTemp[1, FCOUNT()]
    INSERT INTO 结果 FROM ARRAY gaTemp
ENDSCAN 
SELECT 结果
BROWSE 


[此贴子已经被作者于2022-7-13 19:44编辑过]


坚守VFP最后的阵地
2022-07-13 18:57
shonken
Rank: 2
等 级:论坛游民
帖 子:95
专家分:21
注 册:2017-1-15
得分:0 

程序代码:
CREATE CURSOR 测试表 (项目1 Y,项目2 Y,项目3 Y,项目4 Y,项目5 Y,项目6 Y)
INSERT INTO 测试表 VALUES (23,0,11,33,0,25)
INSERT INTO 测试表 VALUES (23,10,21,43,0,15)
INSERT INTO 测试表 VALUES (23,0,0,53,0,55)
Copy To Array gaTemp Fields Like 项目* Next 1
Dimension gaTemp(FCOUNT(),1)
Create Cursor 结果1 (分数 Y )
Append From Array gaTemp
Select 分数 From 结果1 Where 分数#0 Order By 分数 Desc Into Cursor tmp结果
2022-07-13 23:26
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
以下是引用shonken在2022-7-13 23:26:53的发言:



CREATE CURSOR 测试表 (项目1 Y,项目2 Y,项目3 Y,项目4 Y,项目5 Y,项目6 Y)
INSERT INTO 测试表 VALUES (23,0,11,33,0,25)
INSERT INTO 测试表 VALUES (23,10,21,43,0,15)
INSERT INTO 测试表 VALUES (23,0,0,53,0,55)
Copy To Array gaTemp Fields Like 项目* Next 1
Dimension gaTemp(FCOUNT(),1)
Create Cursor 结果1 (分数 Y )
Append From Array gaTemp
Select 分数 From 结果1 Where 分数#0 Order By 分数 Desc Into Cursor tmp结果

也可以直接在数组处理,无需再通过表来操作
程序代码:
CREATE CURSOR 测试表 (项目1 Y,项目2 Y,项目3 Y,项目4 Y,项目5 Y,项目6 Y)
INSERT INTO 测试表 VALUES (0,0,0,0,0,0)
INSERT INTO 测试表 VALUES (23,1,11,33,2,25)
INSERT INTO 测试表 VALUES (23,10,21,43,0,15)
INSERT INTO 测试表 VALUES (23,0,0,53,0,55)
*GO TOP 
Copy To Array gaTemp Fields Like 项目* Next 1
DIMENSION gaTemp[ALEN(gaTemp)]
ASORT(gaTemp,1,-1,1)
n = ASCAN(gaTemp,0)
IF BETWEEN(n,2,ALEN(gaTemp))
    DIMENSION gaTemp[n-1]
ELSE
    STORE null TO gaTemp
ENDIF
LIST MEMORY LIKE gaTemp


[此贴子已经被作者于2022-7-14 08:27编辑过]

2022-07-14 08:12
shonken
Rank: 2
等 级:论坛游民
帖 子:95
专家分:21
注 册:2017-1-15
得分:0 
指向记录号1和2时,数组都为NULL?

以下是引用吹水佬在2022-7-14 08:12:08的发言:


也可以直接在数组处理,无需再通过表来操作

CREATE CURSOR 测试表 (项目1 Y,项目2 Y,项目3 Y,项目4 Y,项目5 Y,项目6 Y)
INSERT INTO 测试表 VALUES (0,0,0,0,0,0)
INSERT INTO 测试表 VALUES (23,1,11,33,2,25)
INSERT INTO 测试表 VALUES (23,10,21,43,0,15)
INSERT INTO 测试表 VALUES (23,0,0,53,0,55)
*GO TOP
Copy To Array gaTemp Fields Like 项目* Next 1
DIMENSION gaTemp[ALEN(gaTemp)]
ASORT(gaTemp,1,-1,1)
n = ASCAN(gaTemp,0)
IF BETWEEN(n,2,ALEN(gaTemp))
    DIMENSION gaTemp[n-1]
ELSE
    STORE null TO gaTemp
ENDIF
LIST MEMORY LIKE gaTemp

2022-07-14 10:45
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:6 
回复 5楼 shonken
没考虑到全非0时,改改这里:
程序代码:
n = ASCAN(gaTemp,0)
n = ICASE(n==0,ALEN(gaTemp), n==1,0, n-1)
IF n>0
    DIMENSION gaTemp[n]
ELSE
    STORE null TO gaTemp
ENDIF


[此贴子已经被作者于2022-7-14 11:23编辑过]

2022-07-14 11:21



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




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

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