我想获取订单表中具有“已接收”(ActivityID = 1)活动但不是“已交付”(ActivityID = 4)活动的订单。即收到但尚未交付的订单。
我的查询是
SELECT OrderID FROM tblOrderActivity
where (tblOrderActivity.ActivityID = 1 AND tblOrderActivity.ActivityID != 4)
GROUP BY OrderID
它没有返回所需的结果。 结果应该是orderID 2和4
答案 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)