构造一个根据匹配接近度排序输出的搜索短语

时间:2013-07-27 20:19:42

标签: ms-access

我过去从这个论坛获得了宝贵的帮助 - 非常感谢!我很感激能为新问题提供更多帮助。

以下是包含5个字段(ID,F1-F4)的表格的一部分。该表向下延伸了数千条记录。

Table1 
ID   F1  F2   F3    F4

1    A    B    1    2
2    A         2    4
3    D    C    8    
4    F    E    4    6
5         B         2
6    D    F    3    
7    B    B         3
8    N    L    1    9
9    A    A    0    7

一些规则: 请注意,列F1和F2中的条目可以出现在任一字段中。同样适用于F3和F4。 F1和F2中的条目永远不会出现在F3和F4中,反之亦然。 单个Null条目可以存在于F1或F2中。 单个Null条目也可以出现在F3或F4中。 但是,F1和F2(和/或)F3和F4中的空值永远不会出现。

初始问题(已解决):

我想在此表中搜索涉及用户输入的搜索词组的排列的匹配项,例如:

F1    F2    F3    F4 
A     B     1     2

如下所示的条件结构将通过允许F1 / F2和F3 / F4 Null之间的排列来实现此目的。

“WHERE(F1 In('A','B')或F1为空)AND(F2 In('A','B')或F2为空)

AND(F3 In(1,2)或F3为空)AND(F4 In(1,2)或F4为空)“

VBA用于根据用户的搜索短语构造“In(..)”语句。对于上述情况,记录集将包含记录1和5(记录5是允许的,因为它不包含带有搜索短语的条目,但可能包括Null)。

新问题(未解决 - 我在这方面有点挣扎):

作为一项附加功能,为了让最终用户受益匪浅,我现在想要显示最接近搜索短语(4/4匹配)的记录,这些记录是订购给那些最远的(0/4匹配),即:

ID    F1    F2    F3    F4    Matches

1     A     B     1     2      4
5           B           2      4
2     A           2     4      2
7     B     B           3      2
9     A     A     0     7      2
5           B           7      1
8     N     L     1     9      1
3     D     C     8            0
4     F     E     4     6      0
6     D     F     3            0

请注意新字段Matches,它显示搜索词组和搜索表之间可接受的匹配数。 请注意,Null计入匹配。另请注意,搜索短语中的条目可以重复并计入可接受的匹配(记录7和9中的F1和F2字段),这也是上面的sql构造。

是否可以在sql中相对无痛地执行此操作?

提前谢谢。

1 个答案:

答案 0 :(得分:2)

基本概要是:

SELECT F1, F2, F3, F4, (IIF function statements here) AS Matches 
FROM Table1 ORDER BY (repeat the IIF statements here) DESC;

不幸的是,我们不能在ORDER BY子句中使用Access的字段别名,这就是为什么需要重复IIF语句。

IIF就像:

IIF(F1='A',1,0) + IIF(..)

但是您需要嵌套一些IIF。