SQL查询逻辑/条件WHERE

时间:2013-06-11 07:12:08

标签: sql tsql sql-server-2008-r2

我希望这是一个简单的问题,但我无法弄清楚如何编写查询以获得正确的结果!

我正在尝试将查询从我们的ERP解决方案(Dynamics NAV)转换为T-SQL。

我已经陷入了报道的状况。在NAV中,它使用一组过滤器检索所有数据 - 这很好。在检索数据之后,它逐个记录,并“跳过”满足2个条件的记录。

跳过记录的条件是: 如果“字段A”<> 4和“字段B”= 0然后跳过。

最接近我必须在T-SQL中重新创建它是:

Select *
From t
WHERE [...] AND ( [FieldA] <> 4 AND [FieldB] = 0 ) 

这不起作用!

如何在T-SQL中排除记录,仅在((A&lt;&gt; 4)AND(B = 0))?

1 个答案:

答案 0 :(得分:2)

逻辑等效not(A and B) === not(A) or not(B)在这里是合适的。

在这种情况下,A表示"Field A" <> 4B表示"Field B" = 0。因此not(A)表示"Field A" = 4not(B)表示"Field B" <> 0

因此

SELECT *
FROM t
WHERE [...]
    AND
    (
        [FieldA] = 4 OR
            [FieldB] <> 0
    )