Sql 代码>将为真。这将导致(FALSE或TRUE),返回TRUE。12的值也是如此。。。(TRUE或FALSE)将返回TRUE。我认为你想要的是返回一个错误。要做到这一点,谓词需要被和在一起

Sql 代码>将为真。这将导致(FALSE或TRUE),返回TRUE。12的值也是如此。。。(TRUE或FALSE)将返回TRUE。我认为你想要的是返回一个错误。要做到这一点,谓词需要被和在一起,sql,sql-server,Sql,Sql Server,我相信这就是你在提问中看到的行为的关键。当您期望谓词返回FALSE时,它们返回TRUE 表达ItemCode上谓词的等效(更简洁)方法是: t.ItemCode IN ('SHIPEXP','SHIPPING','SHIPINT','SHIPBOND','GIFT WRAP') 类似地,ItemStatus的检查可以表示为: t.ItemStatus NOT IN (11,12,1,13,14,15,16,17) 请注意,如果不在中,则不平等性测试将与一起计算,而不是与一起计算。这相当于:

我相信这就是你在提问中看到的行为的关键。当您期望谓词返回FALSE时,它们返回TRUE


表达
ItemCode
上谓词的等效(更简洁)方法是:

t.ItemCode IN ('SHIPEXP','SHIPPING','SHIPINT','SHIPBOND','GIFT WRAP')
类似地,
ItemStatus
的检查可以表示为:

t.ItemStatus NOT IN (11,12,1,13,14,15,16,17)
请注意,如果
不在
中,则不平等性测试将与一起计算,而不是与一起计算。这相当于:

t.ItemStatus <> 11 AND t.itemStatus <> 12 AND ... 
t.ItemStatus 11和t.ItemStatus 12以及。。。

查看您已经尝试过的内容会很有用。您当前的尝试是什么?您的
ItemCode
列中是否有类似
SHIPPING
的值?@M.Ali是的,SHIPPING是一个ItemCode,每个订单的订单行中都会有一个SHIPPING item code。@惊人:我相信您希望在否定(反转)谓词时用或替换OR。(请参阅我在答案底部添加的后续内容。)这些测试可以使用
IN
NOT IN
操作符更简洁地表达,例如
t.ItemStatus IN(11,12,1,13…)
查看您已经尝试过的内容会很有用。您当前的尝试是什么?您的
ItemCode
列中是否有类似
SHIPPING
的值?@M.Ali是的,SHIPPING是一个ItemCode,每个订单的订单行中都会有一个SHIPPING item code。@惊人:我相信您希望在否定(反转)谓词时用或替换OR。(请参阅我在答案底部添加的后续内容。)这些测试可以使用
IN
NOT IN
运算符更简洁地表达,例如
t.ItemStatus IN(11,12,1,13…)
谢谢。一个查询应该能够处理这两种情况。谢谢。一个查询应该能够处理这两种情况。您能告诉我在哪里为ordernumber=111添加where子句,因为我只对该订单的行感兴趣。目前,它将返回所有订单。我们可以简单地添加到末尾。请确保在原始子句周围使用括号。您能告诉我在哪里为ordernumber=111添加where子句,因为我只对该订单的行感兴趣。目前,它将返回所有订单。我们可以简单地添加到末尾。只需确保在原始子句周围使用括号即可。
SELECT ItemCode, Status FROM Your_Table WHERE Status!= 'Completed' AND ItemCode !='SHIPPING' 
SELECT t.ItemCode
     , t.Status
  FROM mytable t
 WHERE t.OrderNumber = 111 
   AND (  ( t.ItemCode <> 'SHIPPING' AND t.Status <> 'Completed' 
          )
       OR ( t.ItemCode = 'SHIPPING' AND EXISTS
              ( SELECT 1
                  FROM mytable s
                 WHERE s.OrderNumber = t.OrderNumber
                   AND s.ItemCode <> 'SHIPPING'
                   AND s.Status <> 'Completed'
              )
           )
       )
          ( t.ItemCode <> 'SHIPPING' AND t.Status <> 'Completed' 
          )
          ( t.ItemCode = 'SHIPPING' AND EXISTS
              ( SELECT 1
                  FROM mytable s
                 WHERE s.OrderNumber = t.OrderNumber
                   AND s.ItemCode <> 'SHIPPING'
                   AND s.Status <> 'Completed'
              )
          )
 ORDER BY CASE t.ItemCode WHEN 'SHIPPING' THEN 2 ELSE 1 END, t.ItemCode
    (a = 'b' OR a = 'c')
    (a <> 'b' AND a <> 'c')
( ItemStatus <> 11 OR ItemStatus <> 12 )
t.ItemCode IN ('SHIPEXP','SHIPPING','SHIPINT','SHIPBOND','GIFT WRAP')
t.ItemStatus NOT IN (11,12,1,13,14,15,16,17)
t.ItemStatus <> 11 AND t.itemStatus <> 12 AND ...