Sql server 2005 SQL Server 2005/2008第n高薪

Sql server 2005 SQL Server 2005/2008第n高薪,sql-server-2005,tsql,Sql Server 2005,Tsql,为了找到我使用的第n个最高工资 select salary from ( select distinct ROW_NUMBER() over (order by salary desc) as rownum,Salary from Employee )a where rownum=2 但是如果我有同样的薪水 70000 70000 60000 50000 50000 当执行查询时,我的薪水是第二高的 70000 instead 60000 如何避免重复?必须区分

为了找到我使用的第n个最高工资

select salary from 
  (
   select distinct ROW_NUMBER() over (order by salary desc) as rownum,Salary
   from Employee
  )a
  where rownum=2
但是如果我有同样的薪水

70000
70000
60000
50000
50000
当执行查询时,我的薪水是第二高的

70000 instead 60000 

如何避免重复?

必须区分的是工资,而不是行号:

SELECT salary FROM
(
    SELECT ROW_NUMBER() OVER (ORDER BY salary DESC) AS rownum, salary
    FROM (SELECT DISTINCT Salary FROM Employee) T1
) T2
WHERE rownum=2

必须区分的是工资,而不是行号:

SELECT salary FROM
(
    SELECT ROW_NUMBER() OVER (ORDER BY salary DESC) AS rownum, salary
    FROM (SELECT DISTINCT Salary FROM Employee) T1
) T2
WHERE rownum=2

虽然Mark已经给出了一个答案,但我认为您使用了错误的函数。你要的不是行号,而是排名。并根据您希望如何处理重复项,特别是您应该使用

例如:


虽然Mark已经给出了一个答案,但我认为您使用了错误的函数。你要的不是行号,而是排名。并根据您希望如何处理重复项,特别是您应该使用

例如:


以下是使用CTE(公共表表达式)得到的第n个最高值


以下是使用CTE(公共表表达式)得到的第n个最高值


谢谢你的澄清谢谢你的澄清
With Result as
(
select salary ,DENSE_RANK () over(ORDER BY salary DESC) AS Denserank FROM employees
)

select Top 1 salary

FROM Result
where Result. Denserank=2