我希望这是一个简单的问题,但我无法弄清楚如何编写查询以获得正确的结果!
我正在尝试将查询从我们的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))?
答案 0 :(得分:2)
逻辑等效not(A and B) === not(A) or not(B)
在这里是合适的。
在这种情况下,A
表示"Field A" <> 4
,B
表示"Field B" = 0
。因此not(A)
表示"Field A" = 4
,not(B)
表示"Field B" <> 0
。
因此
SELECT *
FROM t
WHERE [...]
AND
(
[FieldA] = 4 OR
[FieldB] <> 0
)