AdventureWorks2012:对于每个客户,确定在2007年创建的订单数量,显示0表示无订单

时间:2013-03-30 05:05:26

标签: sql-server-2012

对于每个客户,确定在2007年创建的订单数量。如果客户在2007年未创建任何订单,则为该客户显示0。

显示:客户ID,2007年创建的订单数量(如果没有则显示0)

排序依据:客户ID

1 个答案:

答案 0 :(得分:0)

好的 - 这是第三次我正在为你回答这类问题。在我看来,到目前为止你真的应该能够采取我的一个答案,并调整和放大让它适应你的另一个问题 - 你不同意吗?

所以这里可以找到2007年每位客户的销售数量 - 对于没有任何销售的客户显示0。

-- determine the number of all sales in 2007 for each customer
;WITH SalesPerCustomer AS 
(
    SELECT 
        c.CustomerID,
        NumberOfSales = ISNULL(COUNT(soh.SalesOrderID), 0)
    FROM 
        Sales.Customer c 
    LEFT OUTER JOIN 
        Sales.SalesOrderHeader soh ON soh.CustomerID = c.CustomerID 
                                   AND soh.OrderDate >= '20070101' 
                                   AND soh.OrderDate < '20080101'
    GROUP BY    
        c.CustomerID    
)
SELECT 
    CustomerID ,
    NumberOfSales
FROM 
    SalesPerCustomer
ORDER BY 
    NumberOfSales DESC