【问题标题】:Use NOT Equal condition in sql?在sql中使用NOT Equal条件?
【发布时间】:2015-01-18 04:08:22
【问题描述】:

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

我的查询是

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

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

【问题讨论】:

    标签: sql-server tsql conditional-statements where


    【解决方案1】:

    您的查询实际上没有意义。分组发生在WHERE 子句之后,所以你基本上得到了所有具有ActivityID ==1 的订单(因为如果活动ID 是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
    

    HAVING 条件在分组后应用,这是你想要的。

    【讨论】:

    • 我已经这样做了?它按OrderId 分组,只返回MAX(ActivityID) 小于4 的订单。
    【解决方案2】:

    我认为这里不需要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) 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-01
      • 2012-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多