添加列,根据 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;
该列应包含: '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;