从表中选择多个最高的第n个值

时间:2016-12-24 14:41:25

标签: sql sql-server

EmpId   EmpName EmpJob      MGR     HireDate    Sal       Comm     Deptno

7369    SMITH   CLERK       7902    1980-12-17  1800.00   NULL      20
7499    ALLEN   SALESMAN    7698    1981-02-20  2600.00   300.00    30
7521    WARD    SALESMAN    7698    1981-02-22  2250.00   500.00    30
7566    JONES   MANAGER     7839    1981-04-02  3975.00   NULL      20
7654    MARTIN  SALESMAN    7698    1981-09-28  2250.00   1400.00   30
7698    BLAKE   MANAGER     7839    1981-05-01  3850.00   NULL      30
7782    CLARK   MANAGER     7839    1981-06-09  3450.00   NULL      10
7788    SCOTT   ANALYST     7566    1982-12-09  4000.00   NULL      20

在此表中,我尝试查找5th8th salary,然后记录所有记录except 5th8th在单表中。我怎样才能得到这个结果?

1 个答案:

答案 0 :(得分:5)

您可以使用窗口函数Row_Number()

这将返回所有记录。 5& 8,其次是剩下的

Select *
 From (
        Select *
              ,RN = Row_Number() over (Order By Sal Desc)
         From  YourTable
      ) A
 Order by case when RN in (5,8) then 0 else 1 end,RN

注意:切换到Dense_Rank()以获取关系