【问题标题】:AdventureWorks2012: For each customer, determine the number of orders created in year 2007. Show 0 for no order of that customer.AdventureWorks2012:对于每个客户,确定 2007 年创建的订单数。显示 0 表示该客户没有订单。
【发布时间】:2013-03-29 11:15:29
【问题描述】:

AdventureWorks2012:Sql 对于每个客户,确定 2007 年创建的订单数。如果客户在 2004 年没有创建任何订单,则显示该客户的 0。显示:客户 ID、2007 年创建的订单数。

【问题讨论】:

    标签: sql-server-2012-express


    【解决方案1】:

    与我的其他回复中的方法相同 - 使用 CTE(通用表表达式)来确定 2007 年每个客户的销售数量:

    -- determine the number and total of all sales in 2007
    ;WITH SalesPerCustomer AS 
    (
        SELECT 
            c.CustomerID,
            NumberOfSales = ISNULL(COUNT(soh.SalesOrderID), 0)
        FROM 
            Sales.Customer c 
        INNER 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
    

    按销售额降序排列输出,因此您将首先获得销售额最多的客户

    【讨论】:

    • @user2223932:如果这个答案帮助你解决了你的问题,你应该accept this answer。这将表达您对花费自己的时间帮助您的人们的感激之情。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多