我正在尝试执行此任务:
查找每个客户的所有订单总额,按客户排序 从最大金额到最小金额的价值,并显示客户从40到 结果中的50个位置。只有一个查询。
我在Northwind示例数据库上进行培训。我的问题:
;WITH MyCte AS
(
SELECT
ROW_NUMBER() OVER (ORDER BY SUM(OD.UnitPrice*OD.Quantity*(1-OD.Discount)) DESC) Number
, O.CustomerID
, SUM(OD.UnitPrice*OD.Quantity*(1-OD.Discount)) TotalAmount
FROM [Order Details] OD
RIGHT JOIN Orders O ON OD.OrderID = O.OrderID
GROUP BY CustomerID
ORDER BY TotalAmount DESC
)
SELECT
Number
, CustomerID
, TotalAmount
FROM MyCte
WHERE Number BETWEEN 40 AND 50
但这不起作用。愿有人帮我把" Where"正确地对这个查询?
答案 0 :(得分:0)
;WITH MyCte AS
(
SELECT
ROW_NUMBER() OVER (ORDER BY SUM(OD.UnitPrice*OD.Quantity*(1-OD.Discount)) DESC) Number
, O.CustomerID
, SUM(OD.UnitPrice*OD.Quantity*(1-OD.Discount)) TotalAmount
FROM [Order Details] OD
RIGHT JOIN Orders O ON OD.OrderID = O.OrderID
GROUP BY CustomerID
)
SELECT
Number
, CustomerID
, TotalAmount
FROM MyCte
WHERE Number >= 40 and Number <= 50
主要问题出现在MyCTE表中的Order By中。此查询将有效。