ROW_NUMBER()在查询业绩排名中的使用

想要查看每月销售业绩汇总并找出前3名时发现无法使用TOP实现,求助后得到以下方法实现。

with a
as
(
SELECT Salesperson,Left(orderdate,6) AS Month,   SUM(CONVERT(decimal(13,2),TaxAmount)) AS TotalAmount
FROM ImportOrder
WHERE DATEDIFF(YEAR,orderdate,GETDATE()) = 1  --查找的是去年的数据,所以差异为1。
GROUP BY Salesperson, Left(orderdate,6)
),
b as
(
select Salesperson,[Month],TotalAmount,ROW_NUMBER() over (partition by [Month] order by TotalAmount DESC) as rank_ from a --使用DESC是找出业绩最大的,去除即为找出业绩最差的。
)
select Salesperson,[Month],TotalAmount from b where rank_ <=3  --只找出前3名。
ORDER BY Month DESC, TotalAmount DESC

猜你喜欢

转载自www.cnblogs.com/buzhengsi/p/10600160.html
今日推荐