添加列,根据 2007 年的订单数量确定回头客的频率

Add column which identifies the frequency of repeat customers based on number of orders during 2007

该列应包含: 'No Order' 计数 = 0 'One Time' 计数 = 1 'Regular' 计数范围 2-5 'Often' 计数范围 6-10 'Loyal' 计数更大比 10

下面是查询,我无法在其中使用其他条件,例如 'greater than, range'

SELECT c.CustomerID, c.TerritoryID,
COUNT(o.SalesOrderid) [Total Orders],
CASE COUNT(o.SalesOrderid)
WHEN 1 
THEN 'One Time' 
WHEN 0
THEN 'No Order'
ELSE 'None' 
END AS [Frequency]  
FROM Sales.Customer c
LEFT OUTER JOIN Sales.SalesOrderHeader o
ON c.CustomerID = o.CustomerID
WHERE DATEPART(year, OrderDate) = 2007
GROUP BY c.TerritoryID, c.CustomerID;

我的输出截图

除了简单的 CASE 表达式,您还可以使用 documentation 中描述的搜索格式,如下例所示。此外,我建议您避免将 DATEPART 函数应用于 WHERE 中的 OrderDate 并像下面这样重构,以便表达式是可搜索的,从而允许高效使用索引。

SELECT
      c.CustomerID
    , c.TerritoryID
    , COUNT(o.SalesOrderid) [Total Orders]
    , CASE 
        WHEN COUNT(o.SalesOrderid) = 0 THEN 'No Order'
        WHEN COUNT(o.SalesOrderid) = 1 THEN 'One Time' 
        WHEN COUNT(o.SalesOrderid) BETWEEN 2 AND 5 THEN 'Regular'
        WHEN COUNT(o.SalesOrderid) BETWEEN 6 AND 10
        THEN 'Often'
        ELSE 'Loyal' 
    END AS [Frequency]  
FROM Sales.Customer c
LEFT OUTER JOIN Sales.SalesOrderHeader o
ON c.CustomerID = o.CustomerID
WHERE OrderDate >= '20070101' AND OrderDate < '20080101'
GROUP BY c.TerritoryID, c.CustomerID;