2016-11-14 79 views
1

我有两个表如下定义的所有订单,选择客户名称从客户表和计数使用订单表 - SQL

表:客户

CustomerID | CustomerName | 
-------------------------- 
    1  | John 
    2  | Mack 
    3  | Andy 

表:订单

OrderID | CustomerID| 
-------------------------- 
    1515 | 1 
    1516 | 3 
    1517 | 1 
    1518 | 1 
    1519 | 3 
    1520 | 1 

我想编写一个查询来选择每个客户端放置的所有订单的名称和计数omer使用JOIN。其结果将是,

John | 4 
Mack | 0 
Andy | 2 

我的查询:

SELECT 
    CustomerName, Count(*) 
FROM 
    Orders 
INNER JOIN 
    Customers WHERE Orders.CustomerID = Customers.CustomerID; 

但其返回不正确的结果。请指教。

+0

使用 'ON',而不是'WHERE'和你的问题得到解决 –

回答

1

你缺少GROUP BY。我会写这样的查询:

SELECT c.CustomerName, Count(o.CustomerId) 
FROM Customers c LEFT JOIN 
    Orders o 
    ON o.CustomerID = c.CustomerID 
GROUP BY c.CustomerName; 

注:

  • 表的别名(co)使查询更容易编写和阅读。
  • LEFT JOIN保持所有客户,即使那些没有订单。如果您不想要0计数,则更改为INNER JOIN
  • 所有连接应具有ON子句,而不是JOIN条件的WHERE子句。
  • GROUP BY也需要修复您的查询尝试。
+0

谢谢你的帮助。 –

0

用途:

SELECT Customers.CustomerName, Count(*) 
FROM Orders LEFT OUTER JOIN Customers 
WHERE Orders.CustomerID=Customers.CustomerID GROUP BY Customers.CustomerName; 
+0

它产生的结果与我的相同。我正在使用W3School的客户和订单表。使用此查询后,只选择一行。请使用这些表格进行检查。 –

+0

我不能相信我错过了。 – GurV

0
SELECT CustomerName,ISNULL(_Count,0) [Count] 

从客户 LEFT OUTER JOIN ( SELECT COUNT(*)_COUNT,客户ID _CustomerId 从接单 GROUP BY客户编号 )关于_CustomerId =客户ID