2015-10-18 56 views
0

我正在第二次学习SQL,而且我无法弄清楚如何加入额外的表(这是需要访问该表中的一个字段,我想总结),没有它返回结果的额外的行,因为这是给我不正确的计数。SQL - 当我加入一个附加表格时,它将行添加到我不想计数的结果中

这是我的问题,因为我看到它,但也许我的方法是错误的。

我需要完成的是在OrderItems表中找到每个客户的ItemPrice的所有订单。我已经这样做了,但由于不得不加入附加表格,因此并非没有得到错误的订单数量。

以下是我正在处理的问题的缩写代码,后面是结果。代码原样运行的结果在左侧,结果通过取消注释右侧的2行。

select customers.FirstName, Orders.CustomerID, count(*) as NumOfOrders 

from Orders 
    join Customers 
     on orders.CustomerID=Customers.CustomerID 
-- join OrderItems 
--  on OrderItems.OrderID=Orders.OrderID 

group by customers.FirstName, Orders.CustomerID 
having count(*) > 1 
order by NumOfOrders desc 


fname  ID count     fname  ID count 
---------------------     ---------------------- 
David  4 3      Allan  1 3 
Heather 8 2      David  4 3 
Kris  18 2      Frank  6 3 
Bette  29 2      Heather  8 2 
Allan  1 2      Simona  14 2 
             Kris  18 2 
             Yuki  27 2 
             Bette  29 2 
             Chanel  35 2 
+1

GI订单/客户和orderitem的数据库名称/版本/样本数据以及您的输出。如果您使用http://sqlfiddle.com创建和插入语句,那将会很有帮助。 – Utsav

+0

提供订单,订单商品,客户的示例表... – Chandru

回答

0

只是猜测,因为我没有所需的所有信息,但也许你可以做 count(distinct Orders.OrderID)得到正确的计数?

select customers.FirstName, Orders.CustomerID, count(distinct Orders.OrderID) as NumOfOrders 
from Orders 
    join Customers 
     on orders.CustomerID=Customers.CustomerID 
    join OrderItems 
     on OrderItems.OrderID=Orders.OrderID 
group by customers.FirstName, Orders.CustomerID 
having count(*) > 1 
order by NumOfOrders desc 

也许你需要的HAVING条款调整having count(distinct Orders.OrderID) > 1吗?

相关问题