注册 登录
编程论坛 VFP论坛

请教:数据和数据之间的模糊匹配

lj95315 发布于 2020-07-21 11:21, 2144 次点击
现有两个表,表1名wcb,内有fs19,wc19两个字段;表2名cswc,有wc和fs19两个字段。
现在想让表2的fs19=表1的fs19,但表2的wc又不完全等于表1=wc19,想就近原则匹配。
请大家帮忙,非常感谢。
只有本站会员才能查看附件,请 登录
9 回复
#2
yuantao1002020-07-21 11:46
select a.fs19,a.wc19,b.wc from wcb a,cswc b where a.fs19=b.fs19
#3
sdta2020-07-22 11:39
如何就近匹配原则,举例说明
#4
lj953152020-07-22 12:01
回复 3楼 sdta
比如,图片中的,21名就对应706分,33名也对应706分,419名对应694分。
只有本站会员才能查看附件,请 登录
只有本站会员才能查看附件,请 登录
#5
sdta2020-07-22 12:16
我记得论坛有这个问题的回复,自己先找找
#6
sdta2020-07-22 14:05
程序代码:
CLOSE DATABASES
SET NEAR ON
USE wcb
INDEX on wc19 TAG wc
USE cswc IN 0
SELECT cswc
BLANK FIELDS fs19 ALL
STORE 0 TO ln11, ln12, ln21, ln22
SCAN
    SEEK cswc.wc IN wcb
    ln11 = wcb.wc19
    ln12 = wcb.fs19
    IF RECNO("wcb") > 1
        GO RECNO() - 1 IN wcb
    ENDIF
    ln21 = wcb.wc19
    ln22 = wcb.fs19
    REPLACE fs19 WITH IIF(wc - ln11 <= ln21 - wc, ln22, ln12)
ENDSCAN
SELECT cswc
BROWSE
#7
sdta2020-07-22 14:14
上述结果中,可能会有点小问题,当CSWC表中的WC与WCB表中的上下两值距离相等时,取的是上限。

[此贴子已经被作者于2020-7-22 14:15编辑过]

#8
吹水佬2020-07-22 16:17
没校对,不知对否
只有本站会员才能查看附件,请 登录

SET NEAR ON
SELECT * FROM cswc INTO CURSOR swc READWRITE
USE wcb IN 0 ALIAS awc
nCount = RECCOUNT("awc")
USE wcb IN 0 ALIAS dwc AGAIN
SELECT awc
INDEX on wc19 TAG awc
SELECT dwc
INDEX on wc19 TAG dwc DESCENDING
SELECT swc
SCAN
    SEEK swc.wc IN "awc"
    IF RECNO("awc") > nCount
        GO BOTTOM IN "awc"
    ENDIF
    SEEK swc.wc IN "dwc"
    IF RECNO("dwc") > nCount
        GO BOTTOM IN "dwc"
    ENDIF
    REPLACE swc.fs19 WITH IIF(ABS(swc.wc-awc.wc19)<ABS(swc.wc-dwc.wc19), awc.fs19, dwc.fs19)
ENDSCAN
SELECT * FROM swc
#9
lj953152020-07-23 16:48
等下测试一下,感谢各位大神!
#10
lj953152020-07-23 18:38
感谢楼上两位,测试成功。
1