A.T*_*.T. 3 sql sql-server-2008-r2
我有一个表格,数据是这样的:
Name Salary
Tom 10000
John 20000
Ram 20000
Danny 15000
Sandy 14000
Riddle 15000
Run Code Online (Sandbox Code Playgroud)
我可以找到第二高薪cte
;
with cte
as
(
select ROW_NUMBER() over (order by Salary desc) as r,
* from Employee e
)
select * from cte where r=2
Run Code Online (Sandbox Code Playgroud)
但这给结果'Ram'带来了20000的薪水.我想要归还的是具有第n级薪水的人的每一条记录.例如,如果我正在寻找n=2
,结果将是:
Danny 15000
Riddle 15000
Run Code Online (Sandbox Code Playgroud)
如何修改查询以实现此目的?
用途DENSE_RANK()
:
;WITH cte AS
(
SELECT DENSE_RANK() OVER (ORDER BY Salary DESC) AS r, *
FROM Employee e
)
SELECT *
FROM cte
WHERE r = 2
Run Code Online (Sandbox Code Playgroud)