发布使用ROW_NUMBER()显示前10名工资的重新分级

时间:2010-12-28 10:21:59

标签: sql-server-2005

我需要使用TOP

解决这个问题

我使用以下查询显示前10名薪水

     SELECT  Salary
     from
     (
       SELECT  Salary, Row_Number() OVER(ORDER BY SALARY DESC) AS 'Salaries'
       FROM User2
     )#emp 

          WHERE Salaries <=10

但我的名单是9000,8000,7000,6000,5000,500,4000,3000,2000,10000 ..

这里缺少1000个

我尝试做什么

        WHERE Salaries <10 (but 10000 is not displaying)

我犯了什么错可以给我一个合适的

3 个答案:

答案 0 :(得分:2)

出了什么问题:

SELECT TOP 10 Salary 
FROM User2 
ORDER BY Salary DESC

答案 1 :(得分:2)

首先,我在列表中看到500。如果工资不是数字,则使用字符串排序。所以它将是10000,9000,8000,7000,6000,5000,4000,3000,2000,1000。你真的应该改变列数据类型,但如果你不能,你将需要使用转换函数,例如转换(数字(9,2),工资)。

另外,我认为你最好使用Rank函数 - http://msdn.microsoft.com/en-us/library/ms176102.aspx,因为它可以做你想做的事情。然后,如果你需要前15名,你只需要做出改变。

示例:

SELECT Salary
FROM
(SELECT Salary
    ,RANK() OVER 
    (ORDER BY SALARY DESC) AS 'RANK' From User2) Salaries
WHERE
 Salaries.RANK <= 15

答案 2 :(得分:0)

你似乎过于复杂化了。

请尝试下面的内容。

SELECT TOP 10 Salary FROM User2 ORDER BY Salary DESC
相关问题