Sql server 2008 带有多个AND和OR的SQL Select

Sql server 2008 带有多个AND和OR的SQL Select,sql-server-2008,select,where,Sql Server 2008,Select,Where,我坐在一个逻辑问题,我只是越来越困惑自己 示例表 ID |客户ID |任务|确认|取消|完成 1 | 20 |文本| 1 | 0 | 0 2 | 20 |文本| 1 | 1 | 0 3 | 20 |文本| 1 | 0 | 1 4 | 17 |文本| 0 | 1 | 0 5 | 17 |文本| 1 | 0 | 0 6 | 20 |文本| 1 |空|空 7 | 20 |文本| 0 | 1 |空 我希望选择custID=20且已确认=1的所有任务。如果任务取消=1或完成=1,则不要返回记录 在本例中,

我坐在一个逻辑问题,我只是越来越困惑自己

示例表

ID |客户ID |任务|确认|取消|完成 1 | 20 |文本| 1 | 0 | 0 2 | 20 |文本| 1 | 1 | 0 3 | 20 |文本| 1 | 0 | 1 4 | 17 |文本| 0 | 1 | 0 5 | 17 |文本| 1 | 0 | 0 6 | 20 |文本| 1 |空|空 7 | 20 |文本| 0 | 1 |空

我希望选择custID=20且已确认=1的所有任务。如果任务取消=1或完成=1,则不要返回记录

在本例中,返回的行是1和6

到目前为止,我的问题是

SELECT *
FROM table1
WHERE    
 (CustID = 20 AND Confirmed = 1 AND Cancelled <> 1 AND Completed <> 1) OR
 (CustID = 20 AND Confirmed = 1 AND Cancelled = 1 AND Completed <> 1) OR
 (CustID = 20 AND Confirmed = 1 AND Cancelled <> 1 AND Completed = 1)

非常感谢您的帮助。

您可以将其简化为:

SELECT * FROM table1
WHERE CustID = 20
  AND Confirmed = 1
  AND (Cancelled <> 1 OR Cancelled IS NULL)
  AND (Completed <> 1 OR Completed IS NULL)

在比较实值和空值时,您必须小心且非常明确,因为等式和不等式都排除了它们。

也可以,只需要像上面的解决方案一样包括空值检查,谢谢!
SELECT *
FROM table1
WHERE    
    CustID = 20 AND Confirmed = 1 AND NOT (Cancelled = 1 OR Completed = 1)  
SELECT * FROM thk_basvuru WHERE thk_status in (8,23,33) or thk_olo_status not in (4,6,9,11,12)