微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

两列之间的范围的MS Access匹配

如何解决两列之间的范围的MS Access匹配

我的表T1如下

RL  OR  FVALU   TVALU
R1  O1  3291    
R1  O1  3002    
R1  O1  3010
R2  O1  2000

和另一个表T2如下:

RL  OR  FVALU   TVALU
R1  O1  3291    
R1  O1  3000    3005
R1  O1  5000    
R2  O1  *

预期输出应如下:

RL  OR  FVALU   TVALU   MATCHORDOESNOT
R1  O1  3291            MATCH
R1  O1  3002            MATCH
R1  O1  3010            DONOTMATCH
R2  O1  2000            MATCH

================================================ ================ 如何匹配从T1到T2的FVALU和TVALU字段中的值?

在上述情况下,T1和T2表之间也应匹配3002和3291 *值应与2000匹配。前两列可以具有连接。另外,注意TVALU有时有价值,有时为Null

我已经在下面的查询中尝试过并且无法正常工作:SELECT T1.RL,T1.[OR],T1.FVALU,T1.TVALU,IIf(InStr(([T2]![FVALU]),"*")>0,"MATCH",IIf([T1]![FVALU] Between ([T2]![FVALU]) And (IIf([T2]![FVALU] Is Null,[T2]![FVALU],[T2]![FVALU])),"DONOTMATCH")) AS MATCHORDOESNOT FROM T1 INNER JOIN T2 ON (T1.[OR] = T2.[OR]) AND (T1.RL = T2.RL);

解决方法

使用表的LEFT连接和ON子句中的所有条件:

SELECT DISTINCT T1.*,IIF(T2.RL IS NULL,'DONOTMATCH','MATCH') AS MATCHORDOESNOT
FROM T1 LEFT JOIN T2
ON T2.RL = T1.RL AND T2.[OR] = T1.[OR]
AND (T2.FVALU = T1.FVALU OR (INSTR(T2.FVALU,'*') > 0) OR (T1.FVALU BETWEEN T2.FVALU AND T2.TVALU))

结果:

RL  OR  FVALU   TVALU   MATCHORDOESNOT
R1  O1  3002            MATCH
R1  O1  3010            DONOTMATCH
R1  O1  3291            MATCH   
R2  O1  2000            MATCH

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。