2011-12-05 30 views
-1

我有一個名爲「tblEmployee」..其中兩列爲「EmpName」和「工資」的表... 5行在這個表中是:如何檢索第三最高的薪水,以及與從sql服務器中的表中的僱員姓名

| EmpName | Salary | 
|---------|--------| 
| john | 80000 | 
| ann  | 20000 | 
| james | 40000 | 
| smith | 90000 | 
| rudolph | 30000 | 

我想從tblEmployee表檢索第三最高工資與僱員的名字。 即在這種情況下,我的輸出應該是james,40000

在此先感謝。

回答

3

你可以這樣做:

SELECT TOP 1 * 
FROM (SELECT TOP 3 EmpName, Salary FROM tblEmployees ORDER BY Salary DESC) AS E 
ORDER BY E.Salary ASC 

即選擇前3名員工通過工資然後反轉它們的順序,選擇頂部1

4

對於SQL Server 2005+:

WITH cteRowNums AS (
    SELECT EmpName, Salary, 
      ROW_NUMBER() OVER(ORDER BY Salary DESC) AS RowNum 
     FROM tblEmployee 
) 
SELECT EmpName, Salary 
    FROM cteRowNums 
    WHERE RowNum = 3; 

爲了考慮到綁定的可能性,您可以用DENSE_RANK()替代ROW_NUMBER()函數。

0

我想在上面的答案中指出的第一件事,如果使用的行號,如果表中有重複的記錄將不會工作。您將不得不最終使用不同的上述查詢將不會產生正確的結果。

有很多方法可以實現相同的功能。如果你只需要找到的最高薪水,那麼你可以使用

Select Max(Salary) from Employees 

SQL查詢中使用子查詢

Select Max(Salary) from Employees where Salary < (Select Max(Salary) from Employees) 

SQL查詢來查找在僱員表中第二高的薪水找到第n個薪水最高的員工使用子查詢使用

SELECT TOP 1 SALARY 
FROM (
     SELECT DISTINCT TOP N SALARY 
     FROM EMPLOYEES 
     ORDER BY SALARY DESC 
    ) RESULT 
ORDER BY SALARY 
// Replace the N with the highest number which you need to find. 

SQL查詢表中查找在僱員表中第n個薪水最高使用CTE

WITH RESULT AS 
(
    SELECT SALARY, 
      DENSE_RANK() OVER (ORDER BY SALARY DESC) AS DENSERANK 
    FROM EMPLOYEES 
) 
SELECT TOP 1 SALARY 
FROM RESULT 
WHERE DENSERANK = N 

來取得第三個薪水最高的員工表

WITH RESULT AS 
    (
     SELECT SALARY,EmpName, 
       DENSE_RANK() OVER (ORDER BY SALARY DESC) AS DENSERANK 
     FROM EMPLOYEES 
    ) 
    SELECT TOP 1 SALARY,EmpName 
    FROM RESULT 
    WHERE DENSERANK = 3 

你可以找到差不多的更多的細節在我的博客How to find nth highest salary using SQL query

相關問題