如何多条件遍历全表
有个40万基础表,里面有号码,地址,用户ID,在用APP,在用硬件,希望判断两个号码是否是同一个人,思路是,每行的号码两两比较 用户ID相同,那么给个0.3系数,如果地址相同,给个0.2系数,如果在用APP相同,给个0.1系数,在用硬件相同,给个0.1系数,当所有系数加起来大于0.5,那么两个号码是同一个人,这个时候给两个号码 赋予相同的 客户编号,比如A1,后面可以通过客户编号就能筛选出哪些号码可能是同一个人,难点是系数求和只能是对比的同一行号码对应的,跨行的话系数求和就不对了,所以做了逐行比较,但是40万数据根本运行不了,会卡死,求教
号码归属客户判断.rar
(413.3 KB)
程序代码:
* 打开基础表格 USE 号码归属客户判断 * 创建客户编码计数器 lnCustomerCount = 1 * 遍历表格数据,从第一行开始比较到倒数第二行 FOR lnRow = 1 TO RECCOUNT() - 1 * 定位到当前行 GO lnRow * 获取当前行的地址、用户ID和合户代付群主ID lcCurrentAddress = Address lcCurrentUserID = UserID lcCurrentGroupID = GroupOwnerID lnCurrentCustomerNum = CustomerNum && 当前行的客户编码 * 初始化系数 lnAddressFactor = 0 lnUserFactor = 0 lnGroupFactor = 0 * 从下一行开始比较 FOR lnNextRow = lnRow + 1 TO RECCOUNT() * 定位到下一行 GO lnNextRow * 获取下一行的地址、用户ID和合户代付群主ID lcNextAddress = Address lcNextUserID = UserID lcNextGroupID = GroupOwnerID * 计算地址系数 IF lcCurrentAddress = lcNextAddress lnAddressFactor = 0.3 ENDIF * 计算用户系数 IF lcCurrentUserID = lcNextUserID lnUserFactor = 0.2 ENDIF * 计算合户系数 IF lcCurrentGroupID = lcNextGroupID lnGroupFactor = 0.2 ENDIF * 判断系数之和是否大于等于0.7,如果是则分配客户编码 IF lnAddressFactor + lnUserFactor + lnGroupFactor >= 0.7 IF EMPTY(lnCurrentCustomerNum) lcNewCustomerNum = "A" + TRANSFORM(lnCustomerCount) lnCustomerCount = lnCustomerCount + 1 * 使用 SCAN ... ENDSCAN 结构来更新客户编码字段 SCAN IF RECNO() = lnRow OR RECNO() = lnNextRow REPLACE CustomerNum WITH lcNewCustomerNum ENDIF ENDSCAN ELSE * 更新下一行的客户编码字段 REPLACE CustomerNum WITH lnCurrentCustomerNum FOR RECNO() = lnNextRow ENDIF ENDIF ENDFOR NEXT * 关闭基础表格 USE IN 号码归属客户判断