| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3798 人关注过本帖
标题:求助:多条件记录替换
取消只看楼主 加入收藏
chychychy
Rank: 2
等 级:论坛游民
帖 子:285
专家分:98
注 册:2015-4-18
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:12 
求助:多条件记录替换
调班.rar (33.21 KB)

学籍号,xjh
总成绩,zcj
分区标志,fqbz
调区要求A
数据库已按zcj排好初始分区(fqbz),有需要调整的在A字段,list for a<>0 AND fqbz<>a如下图
有调整需求的只有10条记录
图片附件: 游客没有浏览图片的权限,请 登录注册



按A字段要求找zcj(总成绩)相同的做同等对调,
比如第一条5号记录,A字段值为1不同于fqbz字段值为3,需要做同等对调,将本条记录的fqbz由3替换为1,这样分区为1的就多一人,为同等调整,需要找到fqbz为1且总成绩为936(有可能很多条这样的记录)一条记录将他的fqbz换成3,这样保证同等对调。
比如第二条8号记录,A字段值为2不同于fqbz字段值为1,需要同等对调,但是找不到zcj(总成绩)为934.5,fqbz为2的记录做同等对调,本条记录不予调整。
变了一段小程序但运行结果不对,请帮助修正。
loca for a<>0 AND fqbz<>a
dime arr(4)
SCATTER FIELDS xjh,zcj,fqbz,a TO arr
loca for fqbz=arr(4) and zcj=arr(2) and a=0
repl fqbz with arr(3)
loca for xjh==arr(1)
REPLACE fqbz with arr(4)
clea
LIST for a<>0 AND fqbz2<>a
搜索更多相关主题的帖子: 记录 总成绩 字段 for AND 
2017-07-31 22:20
chychychy
Rank: 2
等 级:论坛游民
帖 子:285
专家分:98
注 册:2015-4-18
收藏
得分:0 
回复 2楼 wangzhiyi
我是loca了一条(当然符合这个条件的记录有多条)但loca会定位到第一条,传到数组的是符合条件的第一条的记录,加上你这个条件后反而错误。

[此贴子已经被作者于2017-8-1 07:56编辑过]

2017-07-31 22:59
chychychy
Rank: 2
等 级:论坛游民
帖 子:285
专家分:98
注 册:2015-4-18
收藏
得分:0 
回复 楼主 chychychy
loca for a<>0 AND fqbz<>a
DO  while found()
    DISPLAY
    **dime arr(4)
    **SCATTER FIELDS xjh,zcj,fqbz,a TO arr
    **repl fqbz with arr(3) for fqbz=arr(4) and zcj=arr(2) and a=0
    **REPLACE fqbz with arr(4) FOR  xjh==arr(1)
    CONTINUE
ENDDO
这样也是错误,请帮助修改**部分以实现正确替换,谢谢!
2017-07-31 23:41
chychychy
Rank: 2
等 级:论坛游民
帖 子:285
专家分:98
注 册:2015-4-18
收藏
得分:0 
回复 5楼 吹水佬
谢谢,我试试,请问如何让我这段循环执行,只执行符合条件的一条,遇到不符合条件的如何继续。
loca for a<>0 AND fqbz<>a
SCATTER FIELDS xjh,zcj,fqbz,a TO arr
loca for  fqbz=arr(4) and zcj=arr(2) and a=0
if found()
    repl fqbz with arr(3)
    repl fqbz with arr(4) for xjh=arr(1)
endif
2017-08-01 08:37
chychychy
Rank: 2
等 级:论坛游民
帖 子:285
专家分:98
注 册:2015-4-18
收藏
得分:0 
回复 7楼 mywisdom88
图片附件: 游客没有浏览图片的权限,请 登录注册

不是的,除了8号记录找不到对等934.5分的,其他都有同等分数的需要调整
2017-08-01 09:50
chychychy
Rank: 2
等 级:论坛游民
帖 子:285
专家分:98
注 册:2015-4-18
收藏
得分:0 
回复 5楼 吹水佬
我试了一下,不行,我可能没说明白,我需要同分对调,比如5号记录,zcj为936分,按A自带要求需要调整,把他从fqbz为3区重新分到1区了,需要找一个从1区找一个936分的调成3区,要不然1区会多一个人。但是8号记录,虽然要求调整,但是找不到一个和他934.5分相同的做对等,就不调整。麻烦再帮忙,谢谢。
2017-08-01 09:56
chychychy
Rank: 2
等 级:论坛游民
帖 子:285
专家分:98
注 册:2015-4-18
收藏
得分:0 
回复 10楼 吹水佬
2号 3号记录就是1区的呀
2017-08-01 11:02
chychychy
Rank: 2
等 级:论坛游民
帖 子:285
专家分:98
注 册:2015-4-18
收藏
得分:0 
回复 10楼 吹水佬
我想这样,从top开始遍历记录,若a<>0 AND fqbz<>a,赋值到数组,那么统计一下分数有无符合条件(COUNT FOR fqbz=arr(4) AND zcj=arr(1) TO bf1 )若BF1的值大于等于1,说明有符合条件的,完成两个替换(REPLACE fqbz WITH arr(3) FOR fqbz=arr(4) AND zcj=arr(1) AND a=0
        REPLACE fqbz WITH arr(4) FOR xjh=arr(1));若bf1值为0,说明没有符合条件的,继续循环,直到所有记录遍历完成。但我不会循环
比如下面
go top
IF a<>0 AND fqbz<>a
    DIMENSION arr(4)
    SCATTER FIELDS xjh,zcj,fqbz,a TO arr
    COUNT FOR fqbz=arr(4) AND zcj=arr(1) TO bf1
        IF bf1>=1
            loca for  fqbz=arr(4) and zcj=arr(2) and a=0
            REPLACE fqbz WITH arr(3) FOR fqbz=arr(4) AND zcj=arr(1) AND a=0
            REPLACE fqbz WITH arr(4) FOR xjh=arr(1)
        ENDIF
??
ENDIF
2017-08-01 11:12
chychychy
Rank: 2
等 级:论坛游民
帖 子:285
专家分:98
注 册:2015-4-18
收藏
得分:0 
回复 14楼 吹水佬
我试了,显示了一条不符合条件未替换的,但是符合条件怎么没有完成替换呢

图片附件: 游客没有浏览图片的权限,请 登录注册



图片附件: 游客没有浏览图片的权限,请 登录注册


[此贴子已经被作者于2017-8-1 11:48编辑过]

2017-08-01 11:45
chychychy
Rank: 2
等 级:论坛游民
帖 子:285
专家分:98
注 册:2015-4-18
收藏
得分:0 
回复 14楼 吹水佬
刚才测试不对,重新测试发现了一个问题,9号,13好记录都要调整且都是934分,9号需要从3调整到1,13号需要从2调整到3,结果9号把符合条件的11号记录从1调整3,13号记录又把调整过1次的11号记录从3调整到了2,这样11号记录被调整了两次,如何避免这种情况。
2017-08-01 14:08
快速回复:求助:多条件记录替换
数据加载中...
 
   



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

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