在以下情况下必须返回null:
-表中少于2行
-没有第二高的薪水,因为每个人的薪水都相同
我查找的所有内容似乎都针对旧版本的Sql Server
DECLARE @find int = (Select COUNT(*) from Employee);
IF (@find = 1)
select null as 'SecondHighest'
else
select Salary as 'SecondHighest'
from Employee
order by Salary desc
offset 1 rows fetch next 1 rows only;
如果少于2列,我设法返回null,尽管我认为可能有更好的方法。
但是,我无法解决第二个问题:
“没有第二高的薪水,因为每个人的薪水都相同”
答案 0 :(得分:5)
这里的方法与@alx类似(顺便说一句,它很简单,所以+1),但是更容易概括为第n个最高薪水:
SELECT MAX(Salary)
FROM
(
SELECT Salary, DENSE_RANK() OVER(ORDER BY Salary DESC) AS Rank
FROM Employee
) E
WHERE (Rank = 2);
答案 1 :(得分:3)
看看这种方法:http://sqlfiddle.com/#!9/dfb2cf/3
以下是查询:
.eslintrc
这是数据:
select max(Salary) from Employee where Salary < (select max(Salary) from Employee);
查询输出create table Employee (Id int, Salary int);
insert into Employee values
(1, 100),
(2, 200),
(3, 300);
,这是正确的答案。我想它也适用于SQL Server。
对于有一条记录的边缘情况,它会输出200
,即内部有null
的单行,而不是零行。