0

过去,我从这个论坛获得了宝贵的帮助——非常感谢!对于新问题的更多帮助,我将不胜感激。

下面是包含 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 中的 Null 将永远不会出现。

初始问题(已解决):

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

F1    F2    F3    F4 
A     B     1     2

像下面这样的条件构造将通过允许 F1/F2 和 F3/F4 Null 之间的排列来实现这一点。

"WHERE (F1 In ('A','B') OR F1 is Null) AND (F2 In ('A','B') OR F2 Is Null)

AND (F3 In (1,2) OR F3 为 Null) AND (F4 In (1,2) OR F4 为 Null)"

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,它显示搜索短语和搜索表之间可接受的匹配数。请注意,空值计入匹配。另请注意,搜索短语中的条目可以重复并计入可接受的匹配项(记录 7 和 9 中的 F1 和 F2 字段),因此,上面的 sql 构造。

是否可以在 sql 中相对轻松地做到这一点?

先感谢您。

4

1 回答 1

2

一个基本的大纲是:

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

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

IIF 将类似于:

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

但是您需要嵌套一些 IIF。

于 2013-07-27T20:46:14.633 回答