MS SQL: SELECT field1, field2 from [table] where field2 NOT IN ('val1', val2') when field1 = 'value2'

MS SQL: SELECT field1, field2 from [table] where field2 NOT IN ('val1', val2') when field1 = 'value2'

我目前在过滤 SQL 记录时遇到问题。我需要类似它在以下概念中产生的结果:

我想根据同一 table 中另一个字段的结果来计算某些记录的结果。说,像下面这样:

SELECT [Field1], [field2] 
FROM [table]
WHERE [Field1] IN ('value1', 'value2')
--from 'value2' i need to filter or remove some records 
WHERE [field2] NOT IN ('val1','val2') When [Field1] is 'value2'

我已经在这上面花了很多时间,但我仍然做不到正确的事情。 我将不胜感激。

两个字段的少量逻辑。

   SELECT [Field1], [field2] 
     FROM [table]
    WHERE [Field1] IN ('value 1' , ... ) -- Other non value 2 values
       OR (Field1 = 'Value 2' AND [field2] NOT IN ('val1','val2'))

您需要将每个条件的逻辑分开。

SELECT  [Field1], [field2] 
FROM    [table]
WHERE   ([Field1] = 'value2' AND [field2] NOT IN ('val1','val2'))
OR      ([Field1] = 'value1')

不清楚你真正想要什么。

但我猜

SELECT [Field1], [field2] FROM [table]
WHERE [Field1] in ('value1', 'value2')
and [field2] !=(case 
when [Field1]='value1' THEN 'val1'
when [Field1]='value2' THEN 'val2'

.
.
.
End)

从最佳答案 (@Siyual's) 开始,您可以对其进行优化以减少维护:

SELECT  [Field1], [field2] 
FROM    [table]
WHERE   ([Field1] = 'value2' AND [field2] NOT IN ('val1','val2'))
OR      ([Field1] = 'value1')

使用 [Field1] = 'value1'[Field1] in('value1', 'value3', 'value...', 'valueN') 意味着每当将新值放入 [Field1] 时,您的查询就会中断。你最好用 [Field1]!='value2' 代替,给你:

SELECT  [Field1], [field2] 
FROM    [table]
WHERE   ([Field1] = 'value2' AND [field2] NOT IN ('val1','val2'))
OR      ([Field1] != 'value2')

从那里,您还可以应用逻辑运算符来意识到您在说 WHERE (A && B) || !A,在这种情况下,XOR 或 OR 之间没有区别,这意味着它等同于 WHERE (!A)||B,它给你:

SELECT  [Field1], [field2] 
FROM    [table]
WHERE   ([Field1] != 'value2') OR [field2] NOT IN ('val1','val2'))