2015-02-07 61 views
0

我试图在SQL服务器中使用COUNT函数来计算每个客户的订单数量,这些数量与最终条件无关。SQL Server查询中的用户COUNT()在where子句中是独立的

select u.FullName, u.Id, o.FullAddress, 
    Price, Payment, o.Created, StartDelivery as Delivering, 
    [Status], o.Id, 

    (select COUNT(Orders.Id) 
    from Orders 
    full outer join Users 
    on Users.Id = Orders.CustomerId) as CountOfOrders 

    from orders o 
    full outer join users u 
    on o.CustomerId = u.Id 

    where [Status] = 0 and Payment = 1; 

使用此查询我得到它看起来是总数的订单,它的数量是在每一行。我想按顾客分组,但不是根据最后的情况。我需要按客户分组的订单总数。

而与此查询:

select u.FullName, u.Id, o.FullAddress, 
Price, Payment, o.Created, StartDelivery as Delivering, 
[Status], o.Id, COUNT(*) OVER (PARTITION BY o.CustomerId) AS CountOfOrders 

from orders o 
full outer join users u 
on o.CustomerId = u.Id 

where [Status] = 2; 

订单数进行分组,但根据在最后的条件。无论最终状况如何,我都需要按客户分组的订单总数。道歉重复我自己我只是想确保我很清楚:)

非常感谢您的任何输入和你的时间!

回答

2

您可以使用子查询:

select ou.* 
from (select u.FullName, u.Id, o.FullAddress, 
      Price, Payment, o.Created, StartDelivery as Delivering, 
      [Status], o.Id, 
      COUNT(*) OVER (PARTITION BY o.CustomerId) AS CountOfOrders 
     from orders o full outer join 
      users u 
      on o.CustomerId = u.Id 
    ) ou 
where [Status] = 2 

顺便说一句,你肯定不需要full outer join。如果您的表格设置了正确的外键关系,那么inner连接就足够了。您是否真的有订单CustomerId字段不是users中的有效值?

+0

多数民众赞成在伟大的!它为我工作!非常感谢! – Milan4e 2015-02-07 14:27:05

+0

不要忘记将它标记为@ Milan4e的正确答案 – 2015-02-07 14:42:09