SQL:根据其他表中的WHERE计算一个表中的值

时间:2017-06-04 02:14:44

标签: sql sql-server count where-clause

我不确定,为什么这不起作用。

我有两个简单的表格:

Orders
OrderTypeID EmployeeID   Completion_needed
10308       72             15%
10309       73             20%
10310       74             30%

Customers
Customer ID   OrderTypeID   OrderDate    Order_completed
    1          10308       2015-09-18          5%
    2          10309       2015-09-19          30%
    3          10310       2017-09-20          25%
    4          10308       2015-09-18          17%
    2          10308       2015-09-19          20%
    3          10309       2017-09-20          7%

我想计算有多少客户有未完成的订单,其中Customers表中的Order_completed小于Orders表中的Completion_needed(请注意,客户可以拥有多个订单类型)。

这是我的查询,但结果错误:

SELECT COUNT(c.CustomerID) as count_employees
FROM Orders od
JOIN Customers c
ON od.OrderTypeID = c.OrderTypeID
WHERE od.Completion_needed > c.Order_completed

我得到1;但我应该得到2的计数。

1 个答案:

答案 0 :(得分:1)

我没看到你的查询得到“1”。我看到它产生“3”。所以,我认为你需要的是COUNT(DISTINCT)

  SELECT COUNT(DISTINCT c.CustomerId)
  FROM Orders od JOIN
       Customers c
       ON od.OrderTypeID = c.OrderTypeID
  WHERE c.Order_completed < od.Completion_needed;