我过去从这个论坛获得了宝贵的帮助 - 非常感谢!我很感激能为新问题提供更多帮助。
以下是包含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中相对无痛地执行此操作?
提前谢谢。
答案 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。