I am writing a query in SQL Server wherein I'm attempting to generate a data indicator based on multiple "fuzzy matched" criteria. Some example code to illustrate this task:
CASE WHEN COLUMN_1 IN ('CRITERIA_A') AND
COLUMN_2 NOT LIKE '%FUZZY_MATCH_A%' OR
COLUMN_2 NOT LIKE '%FUZZY_MATCH_B%' OR
COLUMN_2 NOT LIKE '%FUZZY_MATCH_C%'
THEN 'Y' ELSE NULL END
However, when this code runs the flag is assigned to all rows, when in fact is should only flag rows where COLUMN_2 doesn't match the patterns.
I attempted the use of parenthesis as a remedy like the following example, but it failed:
CASE WHEN COLUMN_1 IN ('CRITERIA_A') AND
(COLUMN_2 NOT LIKE '%FUZZY_MATCH_A%' OR
COLUMN_2 NOT LIKE '%FUZZY_MATCH_B%' OR
COLUMN_2 NOT LIKE '%FUZZY_MATCH_C%')
THEN 'Y' ELSE NULL END
I attempted nesting Case Statements as well, also failed:
CASE WHEN COLUMN_1 IN ('CRITERIA_A') THEN
CASE WHEN COLUMN_2 NOT LIKE '%FUZZY_MATCH_A%' OR
COLUMN_2 NOT LIKE '%FUZZY_MATCH_B%' OR
COLUMN_2 NOT LIKE '%FUZZY_MATCH_C%'
THEN 'Y' ELSE NULL END
So, written as if plainly-spoken, the goal is "When [COLUMN_1] has 'X' value and the value in [COLUMN_2] doesn't match this list of possible patterns then assign the record a flag of 'Y'".
Is this possible in SQL Server? I'd value any additional related expertise / insights you might offer as well. Sincere thanks in advance!