如何多条件遍历全表
有个40万基础表,里面有号码,地址,用户ID,在用APP,在用硬件,希望判断两个号码是否是同一个人,思路是,每行的号码两两比较 用户ID相同,那么给个0.3系数,如果地址相同,给个0.2系数,如果在用APP相同,给个0.1系数,在用硬件相同,给个0.1系数,当所有系数加起来大于0.5,那么两个号码是同一个人,这个时候给两个号码 赋予相同的 客户编号,比如A1,后面可以通过客户编号就能筛选出哪些号码可能是同一个人,难点是系数求和只能是对比的同一行号码对应的,跨行的话系数求和就不对了,所以做了逐行比较,但是40万数据根本运行不了,会卡死,求教
程序代码:
* 打开基础表格
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 号码归属客户判断









