Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
值为'时返回null;不存在于SQL中_Sql_Sql Server - Fatal编程技术网

值为'时返回null;不存在于SQL中

值为'时返回null;不存在于SQL中,sql,sql-server,Sql,Sql Server,我在这里解决这个问题: 这是我已经写过的代码 select Salary as SecondHighestSalary from (select Salary, row_number() over (order by Salary desc) as rank from Employee) temp where rank = 2 如果第二高的值不存在,我想返回null。我想我应该使用CASE,或者是notnull(这是我最熟悉的两个函数)。如果您可以提供两个解决方案,每个解决方案都使用这些功能

我在这里解决这个问题:

这是我已经写过的代码

select Salary as SecondHighestSalary from
(select Salary, row_number() over (order by Salary desc) as rank 
from Employee) temp
where rank = 2

如果第二高的值不存在,我想返回null。我想我应该使用CASE,或者是notnull(这是我最熟悉的两个函数)。如果您可以提供两个解决方案,每个解决方案都使用这些功能,那就太好了。

如果您想要第二高的薪水,那么使用
rank()
而不是
row\u number()

如果要返回一行,即使不存在行,也要使用聚合

因此:


如果所有薪资相同,则返回
NULL

选择降序排序后的第二个薪资。
如果没有第二份工资,结果将为
null

select (
       select distinct salary
       from employee 
       order by salary desc
       offset 1 rows fetch next 1 rows only
       ) SecondHighestSalary;

请参见。

别名
rank
需要反勾号,因为它是一个保留字,并且您遗漏了一个括号:
max(salary
@forpas…,这取决于数据库,所以我只是更改了名称。OP的链接指向MySQL,但最好重命名。可能是
select (
       select distinct salary
       from employee 
       order by salary desc
       offset 1 rows fetch next 1 rows only
       ) SecondHighestSalary;