| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3823 人关注过本帖
标题:纵向比较,上下记录相同,则在顺序号字段中填上数值?
只看楼主 加入收藏
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
以下是引用lnsyzhuhua在2017-8-16 15:10:27的发言:

此类问题,论坛中有不少,自己搜索吧

坚守VFP最后的阵地
2017-08-16 15:21
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
以下是引用lnsyzhuhua在2017-8-16 15:10:27的发言:

提问题要一步到位,搞的神神秘秘的,这样不好。你的问题类似排名问题,可以参考:https://blog.bccn.net/sdta/61771

坚守VFP最后的阵地
2017-08-16 15:24
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:5 
回复 7楼 lnsyzhuhua
第一种情况
如:
图片附件: 游客没有浏览图片的权限,请 登录注册

** test.prg
CREATE CURSOR tt (编号 C(20), 顺序号 I)
INSERT INTO tt VALUES ("02017073110560000220", 0)
INSERT INTO tt VALUES ("02017073110560000221", 0)
INSERT INTO tt VALUES ("02017073110560000221", 0)
INSERT INTO tt VALUES ("02017073110560000222", 0)
INSERT INTO tt VALUES ("02017073110560000222", 0)
INSERT INTO tt VALUES ("02017073110560000222", 0)
SELECT DISTINCT * FROM tt INTO CURSOR tmp READWRITE
SELECT tmp
INDEX on 编号 TAG 编号
SELECT tt
SET RELATION TO 编号 INTO "tmp"
REPLACE tt.顺序号 WITH tmp.顺序号+1, tmp.顺序号 WITH tmp.顺序号+1 ALL
SET RELATION TO
BROWSE
2017-08-16 16:16
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:10 
第二种情况
如:
图片附件: 游客没有浏览图片的权限,请 登录注册

** test.prg
CREATE CURSOR tt (编号 C(20), 顺序号 I)
INSERT INTO tt VALUES ("02017073110560000220", 0)
INSERT INTO tt VALUES ("02017073110560000221", 0)
INSERT INTO tt VALUES ("02017073110560000221", 0)
INSERT INTO tt VALUES ("02017073110560000222", 0)
INSERT INTO tt VALUES ("02017073110560000222", 0)
INSERT INTO tt VALUES ("02017073110560000222", 0)
INDEX on 编号 TAG 编号
c编号 = ""
n顺序号 = 0
SCAN
    IF c编号 != 编号
        c编号 = 编号
        n顺序号 = n顺序号 + 1
    ENDIF
    REPLACE 顺序号 WITH n顺序号
ENDSCAN
BROWSE
2017-08-16 16:23
红星二锅头
Rank: 8Rank: 8
等 级:贵宾
威 望:46
帖 子:491
专家分:754
注 册:2016-8-25
收藏
得分:0 
Select A.DM, (Select Count(*) 次数 ;
    Where A.DM = B.DM From Ls B) ;
    From Ls A Order By DM

团队红星二锅头,队长王猛,领队李冲,顾问杨伟,副队张挺,外联马彪,内勤韩秀,人事顾闯,财务赵魁,后勤周强
2017-08-16 19:20
红星二锅头
Rank: 8Rank: 8
等 级:贵宾
威 望:46
帖 子:491
专家分:754
注 册:2016-8-25
收藏
得分:0 
Update SQL 语句也可以做
这样的示例还是用循环速度快

[此贴子已经被作者于2017-8-16 19:58编辑过]


团队红星二锅头,队长王猛,领队李冲,顾问杨伟,副队张挺,外联马彪,内勤韩秀,人事顾闯,财务赵魁,后勤周强
2017-08-16 19:56
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
以下是引用吹水佬在2017-8-16 16:23:14的发言:

第二种情况
如:

** test.prg
CREATE CURSOR tt (编号 C(20), 顺序号 I)
INSERT INTO tt VALUES ("02017073110560000220", 0)
INSERT INTO tt VALUES ("02017073110560000221", 0)
INSERT INTO tt VALUES ("02017073110560000221", 0)
INSERT INTO tt VALUES ("02017073110560000222", 0)
INSERT INTO tt VALUES ("02017073110560000222", 0)
INSERT INTO tt VALUES ("02017073110560000222", 0)
INDEX on 编号 TAG 编号
c编号 = ""
n顺序号 = 0
SCAN
    IF c编号 != 编号
        c编号 = 编号
        n顺序号 = n顺序号 + 1
    ENDIF
    REPLACE 顺序号 WITH n顺序号
ENDSCAN
BROWSE

要求快些,不用循环也可以。
CREATE CURSOR tt (编号 C(20), 顺序号 I)
INSERT INTO tt VALUES ("02017073110560000220", 0)
INSERT INTO tt VALUES ("02017073110560000221", 0)
INSERT INTO tt VALUES ("02017073110560000221", 0)
INSERT INTO tt VALUES ("02017073110560000222", 0)
INSERT INTO tt VALUES ("02017073110560000222", 0)
INSERT INTO tt VALUES ("02017073110560000222", 0)
INDEX on 编号 TAG 编号
c编号 = ""
n顺序号 = 0
REPLACE 顺序号 WITH tj() ALL
BROWSE

FUNCTION tj()
    IF c编号 != 编号
        c编号 = 编号
        n顺序号 = n顺序号 + 1
    ENDIF
    RETURN n顺序号
ENDFUNC
2017-08-16 20:07
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1547
专家分:184
注 册:2006-6-3
收藏
得分:0 
以下是引用吹水佬在2017-8-16 16:16:15的发言:

第一种情况
如:
 
** test.prg
CREATE CURSOR tt (编号 C(20), 顺序号 I)
INSERT INTO tt VALUES ("02017073110560000220", 0)
INSERT INTO tt VALUES ("02017073110560000221", 0)
INSERT INTO tt VALUES ("02017073110560000221", 0)
INSERT INTO tt VALUES ("02017073110560000222", 0)
INSERT INTO tt VALUES ("02017073110560000222", 0)
INSERT INTO tt VALUES ("02017073110560000222", 0)
SELECT DISTINCT * FROM tt INTO CURSOR tmp READWRITE  
SELECT tmp
INDEX on 编号 TAG 编号
SELECT tt
SET RELATION TO 编号 INTO "tmp"
REPLACE tt.顺序号 WITH tmp.顺序号+1, tmp.顺序号 WITH tmp.顺序号+1 ALL  
SET RELATION TO
BROWSE
吹水佬:

REPLACE tt.顺序号 WITH tmp.顺序号+1, tmp.顺序号 WITH tmp.顺序号+1 ALL  
此句代码如何理介?
图片附件: 游客没有浏览图片的权限,请 登录注册
图片附件: 游客没有浏览图片的权限,请 登录注册

tt库与tmp库关联:多对一,它们间如何替换?TT库第一条记录(220)对应TMP的第一条记录(220),TT库第二条记录(221)应对应TMP第二条记录(221),它的顺序号为2,为什么在TT库中(221)除有2外还有1呢?同理TT库中第四条记录(222)它的顺序号1,2,3?
2017-08-17 10:16
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
以下是引用sylknb在2017-8-17 10:16:04的发言:

吹水佬:

REPLACE tt.顺序号 WITH tmp.顺序号+1, tmp.顺序号 WITH tmp.顺序号+1 ALL  
此句代码如何理介?
tt库与tmp库关联:多对一,它们间如何替换?TT库第一条记录(220)对应TMP的第一条记录(220),TT库第二条记录(221)应对应TMP第二条记录(221),它的顺序号为2,为什么在TT库中(221)除有2外还有1呢?同理TT库中第四条记录(222)它的顺序号1,2,3?

REPLACE tt.顺序号 WITH tmp.顺序号+1, tmp.顺序号 WITH tmp.顺序号+1 ALL  
这句改改好看点:
REPLACE tmp.顺序号 WITH tmp.顺序号+1, tt.顺序号 WITH tmp.顺序号 ALL  
再把这句改为这样好读点、更容易理解点:
SCAN
    REPLACE tmp.顺序号 WITH tmp.顺序号+1, tt.顺序号 WITH tmp.顺序号
ENDSCAN
或者:
SCAN
    REPLACE tmp.顺序号 WITH tmp.顺序号+1
    REPLACE tt.顺序号 WITH tmp.顺序号
ENDSCAN
2017-08-17 10:32
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1547
专家分:184
注 册:2006-6-3
收藏
得分:0 
以下是引用吹水佬在2017-8-17 10:32:11的发言:

 
REPLACE tt.顺序号 WITH tmp.顺序号+1, tmp.顺序号 WITH tmp.顺序号+1 ALL   
这句改改好看点:
REPLACE tmp.顺序号 WITH tmp.顺序号+1, tt.顺序号 WITH tmp.顺序号 ALL   
再把这句改为这样好读点、更容易理解点:
SCAN  
    REPLACE tmp.顺序号 WITH tmp.顺序号+1, tt.顺序号 WITH tmp.顺序号
ENDSCAN
或者:
SCAN  
    REPLACE tmp.顺序号 WITH tmp.顺序号+1
    REPLACE tt.顺序号 WITH tmp.顺序号
ENDSCAN
吹水佬:
SCAN  
    REPLACE tmp.顺序号 WITH tmp.顺序号+1
    REPLACE tt.顺序号 WITH tmp.顺序号
ENDSCAN
 
图片附件: 游客没有浏览图片的权限,请 登录注册
图片附件: 游客没有浏览图片的权限,请 登录注册

还是不理介?环循开始时TT第一条记录的顺序号用TMP第一条顺序号来替换,,环循下移后tmp的顺序号为2,为什么TT中的第二条记录(编号221)的顺序号为1而不是2?
2017-08-17 11:18
快速回复:纵向比较,上下记录相同,则在顺序号字段中填上数值?
数据加载中...
 
   



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

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