2016-12-28 120 views
2

我有一个基本的选择查询将队列结果拉入我们的页面。我试图在where子句中添加一些逻辑,以防止记录显示何时包含特定的一组值。TSQL Where子句满足多个条件

WHERE (
     (L.requestType <> 'Check') 
     AND (L.requestStatus <> 'New Request') 
     AND (DATEDIFF(hour, CAST(L.requestDate AS DATE), GETDATE()) between 0 and 48) 
    ) 

在上面的例子中,我不想包含具有所有三个数据点的记录。

进行一些测试时,例如排除所有“检查”,即使这些记录也不符合其他两条标准。

我怎么能让我的where子句符合所有标准,而不是做什么似乎是or

+0

现在还不清楚,我认为你要保持行和什么样的标准应该被过滤的标准是什么暗示。 –

+0

@GordonLinoff - 除了符合where子句中所有三条标准的记录之外,所有数据都将被包含。他们不能成为最近48小时内具有新请求状态的支票。 – SBB

回答

4

你需要

WHERE NOT (L.requestType = 'Check' 
      AND L.requestStatus = 'New Request' 
      AND (DATEDIFF(hour, CAST(L.requestDate AS DATE), GETDATE()) between 0 and 48 
     ) 

这相当于

WHERE (L.requestType <> 'Check' 
     OR L.requestStatus <> 'New Request' 
     OR DATEDIFF(hour, CAST(L.requestDate AS DATE), GETDATE()) not between 0 and 48 
     ) 
+0

这样做:x - 感谢您的快速响应。以前从来没有想过尝试过。 – SBB

+0

@SBB。 。 。如果这是正确的,那么你应该接受答案。 –