Я считаю, что вы можете выполнить этот поиск после некоторой подготовки ваших данных. После разделения полей вам не понадобится оператор LIKE
, а только точное соответствие для подполей.
Для данных поиска измените столбец B на 5 столбцов:
B1 || B2 || B3 || B4 || B5 || Column C
999 || X || 000 || 400 || X || John
X || 22222 || X || 777 || X || Smith
Для входных данных сделайте аналогичное разбиение:
IN1 || IN2 || IN3 || IN4 || IN5
999 || 55555 || 000 || 400 || 9999
800 || 22222 || 123 || 777 || 2233
Теперь вам нужно будет использовать ... 5 Lookups, по одному на каждое подполе
Lkp1
Condition : IN1 = B1
Output : Match1_B1, Match1_B2, Match1_B3, Match1_B4, Match1_B5, Match1_Column_C
Lkp2
Condition : IN2 = B2
Output : Match2_B1, Match2_B2, Match2_B3, Match2_B4, Match2_B5, Match2_Column_C
И так далее на 5
Для первой строки вы получите:
Match1_B1 : 999
Match1_B2 : X
Match1_B3 : 000
Match1_B4 : 400
Match1_B5 : X
Match1_Column_C : John
Match2_B1 : NULL
Match2_B2 : NULL
Match2_B3 : NULL
Match2_B4 : NULL
Match2_B5 : NULL
Match2_Column_C : NULL
Match3_B1 : 999
Match3_B2 : X
Match3_B3 : 000
Match3_B4 : 400
Match3_B5 : X
Match3_Column_C : John
Match4_B1 : 999
Match4_B2 : X
Match4_B3 : 000
Match4_B4 : 400
Match4_B5 : X
Match4_Column_C : John
Match5_B1 : NULL
Match5_B2 : NULL
Match5_B3 : NULL
Match5_B4 : NULL
Match5_B5 : NULL
Match5_Column_C : NULL
Теперь в выражении вы связываете все поисковые запросы и проверяете, совпадают ли подполя:
IIF( (ISNULL(Match1_B1) OR Match1_B1 != 'X')
AND (ISNULL(Match2_B2) OR Match2_B2 != 'X')
AND (ISNULL(Match3_B3) OR Match3_B3 != 'X')
AND (ISNULL(Match4_B4) OR Match4_B4 != 'X')
AND (ISNULL(Match5_B5) OR Match5_B5 != 'X'),
IIF(ISNULL(Match1_Column_C),
IIF(ISNULL(Match2_Column_C),
IIF(ISNULL(Match3_Column_C),
IIF(ISNULL(Match4_Column_C),
Match5_Column_C,
Match4_Column_C
),
Match3_Column_C
),
Match2_Column_C
),
Match1_Column_C
)
)
Надеюсь, это должно быть примерно так, как вы хотите!