2015-10-07 134 views
0

我目前在过滤我的SQL记录时遇到了麻烦。我需要类似于以下概念的结果:MS SQL:SELECT field1,field2 from [table] where field2 NOT IN('val1',val2')when field1 ='value2'

我想根据同一个表中另一个字段的结果得到一些记录的结果。再说了,像下面这样:

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' 

我已经在这花了很多的时间我还是不能做正确的东西。 我希望得到即时的帮助。

回答

1

与顶端回答开始(@ Siyual的),则可对其进行优化,以减少维修:

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')) 
+0

实际上是最佳答案是最接近的一个。我只是想知道我还缺少什么。 – moraler

+0

我重新整理了整篇文章,以更好地解释我的观点。基本上,我和@Siyual做同样的事情,所以只要你不添加任何新的数据,我们的两个查询都应该完全一样。 –

+0

感谢!我明白你的意思,但它并没有给我我想要的结果。 我想得到的是从第一个过滤器的一些结果到我的下一个过滤器。就像 其中[field1] IN(从另一个表中选择DISTINCT类别) - 第一个过滤器的结果将成为第二个过滤器的基础..如果类别包含“value2”,我将必须过滤field1为值2的记录,排除显示具有“val1”和“val2”的记录,以便使用那些将被过滤的记录是[field1]中等于value2的那些记录 – moraler

1

两个字段的小逻辑。

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')) 
+1

这其实不是帮助其他“[字段1] IN('值1,‘值’)”其实是这样的.. [字段1 ] IN(来自[TABLE2]的SELECT DISTINCT [field]) 因此,值2实际上是另一个查询的一部分。 – moraler

+0

Moraler,它是一个很好的想法,可以考虑您想要过滤的逻辑。如果你可以把它写成一个简单的句子,那么你可以生成你的where子句。 – StoicFnord

+0

我其实也是。我仍然无法弄清楚。大声笑! 这是这一个。 – moraler

1

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

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

不清楚你真正想要什么。

但我的猜测

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

. 
. 
. 
End) 
相关问题