| 网站首页 | 业界新闻 | 小组 | 交易 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 524 人关注过本帖
标题:请教:数据和数据之间的模糊匹配
只看楼主 加入收藏
lj95315
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2018-3-1
结帖率:0
收藏
已结贴  问题点数:10 回复次数:9 
请教:数据和数据之间的模糊匹配
现有两个表,表1名wcb,内有fs19,wc19两个字段;表2名cswc,有wc和fs19两个字段。
现在想让表2的fs19=表1的fs19,但表2的wc又不完全等于表1=wc19,想就近原则匹配。
请大家帮忙,非常感谢。
附件: 游客没有浏览附件的权限,请 登录注册
搜索更多相关主题的帖子: 匹配 等于 字段 数据 模糊 
2020-07-21 11:21
yuantao100
Rank: 2
等 级:论坛游民
帖 子:61
专家分:16
注 册:2012-7-5
收藏
得分:4 
select a.fs19,a.wc19,b.wc from wcb a,cswc b where a.fs19=b.fs19
2020-07-21 11:46
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:233
帖 子:8298
专家分:21365
注 册:2012-2-5
收藏
得分:4 
如何就近匹配原则,举例说明

坚守VFP最后的阵地
2020-07-22 11:39
lj95315
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2018-3-1
收藏
得分:0 
回复 3楼 sdta
比如,图片中的,21名就对应706分,33名也对应706分,419名对应694分。
附件: 游客没有浏览附件的权限,请 登录注册
2020-07-22 12:01
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:233
帖 子:8298
专家分:21365
注 册:2012-2-5
收藏
得分:0 
我记得论坛有这个问题的回复,自己先找找

坚守VFP最后的阵地
2020-07-22 12:16
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:233
帖 子:8298
专家分:21365
注 册:2012-2-5
收藏
得分:0 
程序代码:
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 

坚守VFP最后的阵地
2020-07-22 14:05
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:233
帖 子:8298
专家分:21365
注 册:2012-2-5
收藏
得分:0 
上述结果中,可能会有点小问题,当CSWC表中的WC与WCB表中的上下两值距离相等时,取的是上限。

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


坚守VFP最后的阵地
2020-07-22 14:14
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:276
帖 子:7629
专家分:34125
注 册:2014-5-20
收藏(1)
得分:4 
没校对,不知对否

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
附件: 游客没有浏览附件的权限,请 登录注册
2020-07-22 16:17
lj95315
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2018-3-1
收藏
得分:0 
等下测试一下,感谢各位大神!
2020-07-23 16:48
lj95315
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2018-3-1
收藏
得分:0 
感谢楼上两位,测试成功。
2020-07-23 18:38
快速回复:请教:数据和数据之间的模糊匹配
数据加载中...
 
   



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

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