在以下情况下必须返回 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,尽管我认为可能有更好的方法来做到这一点。但是,我无法解决第二个问题:
"没有第二高的薪水,因为每个人都有相同的薪水">
这里有一个类似的@alx方法(顺便说一句,这很好,很简单,所以+1(,但选择第n个最高薪水会更容易概括:
SELECT MAX(Salary)
FROM
(
SELECT Salary, DENSE_RANK() OVER(ORDER BY Salary DESC) AS Rank
FROM Employee
) E
WHERE (Rank = 2);
看看这种方法: http://sqlfiddle.com/#!9/dfb2cf/3
下面是查询:
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);
查询输出200
哪个是正确的答案。我想它也适用于SQL服务器。
对于一条记录的边缘情况,它输出null
,即单行内部有null
,而不是零行结果。