2010-09-03 5 views
0

Pour trouver plus haut salaire nième J'utiliseSQL Server 2005/2008 Trouver nième plus haut salaire

select salary from 
    (
    select distinct ROW_NUMBER() over (order by salary desc) as rownum,Salary 
    from Employee 
)a 
    where rownum=2 

Toutefois, si j'ai même salaire comme

70000 
70000 
60000 
50000 
50000 

Lors de l'exécution de la requête je reçois au deuxième rang salaire

70000 instead 60000 

comment éviter les doublons?

Répondre

3

Bien que Mark a déjà fourni une réponse, je dirais que vous utilisez la mauvaise fonction. Vous ne voulez pas le numéro de ligne, vous voulez le RANK. Et en fonction de la façon dont vous voulez gérer les doublons, vous devriez utiliser DENSE_RANK.

.: par exemple

SELECT salary FROM 
(
    SELECT DENSE_RANK() OVER (ORDER BY salary DESC) AS rank, salary 
    FROM Employee 
) T2 
WHERE rank=2 
+0

Merci Damien pour vous CLARIFICATION – Gopi

+0

+1 Je suis d'accord. C'est la bonne façon de le faire. –

3

Ce sont les salaires qui doivent être distincts, et non pas les numéros de ligne:

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 
0

Voici la conclusion nième plus élevée utilisant CTE (Common Table Expression)

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 
Questions connexes