在sql中使用NOT Equal条件?

时间:2015-01-18 04:08:22

标签: sql-server tsql conditional-statements where

我想获取订单表中具有“已接收”(ActivityID = 1)活动但不是“已交付”(ActivityID = 4)活动的订单。即收到但尚未交付的订单。

我的查询是

SELECT OrderID FROM tblOrderActivity
where (tblOrderActivity.ActivityID = 1 AND tblOrderActivity.ActivityID != 4)  
GROUP BY OrderID 

它没有返回所需的结果。 结果应该是orderID 2和4

2 个答案:

答案 0 :(得分:1)

您的查询确实没有意义。分组在WHERE子句之后发生,因此您基本上获得了ActivityID == 1的所有订单(因为如果活动ID为1,那么它始终不等于{ {1}})。

在应用4子句后,您最终得到以下行:

WHERE

这些是您分组的订单。不再评估条件。

如果OrderID ActivityID 1 1 2 1 3 1 4 1 是最高4,您可以执行以下操作:

ActivityID
分组后应用

SELECT OrderID FROM tblOrderActivity GROUP BY OrderID HAVING MAX(ActivityID) < 4 条件,这就是您想要的。

答案 1 :(得分:0)

我不认为这里需要Group by。您可以使用Subquery查找未送达的订单。试试这个。

SELECT *
FROM   Yourtable a
WHERE  a.ActivityID = 1
       AND NOT EXISTS (SELECT 1
                       FROM   yourtable b
                       WHERE  a.OrderID = b.OrderID
                              AND b.ActivityID = 4)