select * from ( select ROW_NUMBER() OVER(order by SUM(HavePayAmount) desc) AS rowNum, CustomerID,CustomerName,SUM(Amount) sumContractAmount, SUM(HavePayAmount) sumHavePayAmount from #tmpTable where (ContractDate >= '2012-04-01' and ContractDate <= '2012-04-28') group by CustomerID,CustomerName --having SUM(HavePayAmount) >= 40000 --order by sumHavePayAmount desc ) bbb where rowNum BETWEEN 1 AND 5 order by sumHavePayAmount desc