And now we know why test data is essential for such "general" questions. 😛
Just to add my 2 cents, you can combine the Year and Month comparison by doing the following...
ROW_NUMBER() OVER (PARTITION BY DATEDIFF(mm,0,o.OrderDate) ORDER BY o.TotalDue desc) MonthPosition
I couldn't test it for speed because, right now, I'm on a box that doesn't have the 2k8 version of AdventureWorks. I've usually not found it to make a huge difference in performance but I really like it because it cuts that part of the typing in half. 😀
--Jeff Moden
Change is inevitable... Change for the better is not.