Hse*_*ung 14 sql sql-server sql-server-2008
我想找到多列的最大值.
MySQL支持该GREATEST功能,但SQL Server不支持.
在SQL Server 2008中是否有与此类似的功能?
Mar*_*ith 21
不可以.但是子查询可以访问外部查询中的列,因此您可以添加UNION ALL对感兴趣的列的子查询作为派生表,然后从中选择max.
SELECT *,
(SELECT MAX(c) FROM
(SELECT number AS c
UNION ALL
SELECT status) T) AS GreatestNumberOrStatus
FROM master..spt_values
Run Code Online (Sandbox Code Playgroud)
或者更简洁的版本就像你在2008年一样.
SELECT *,
(SELECT MAX(c) FROM (VALUES(number),(status)) T (c)) AS Greatest
FROM master..spt_values
Run Code Online (Sandbox Code Playgroud)
为此,我创建了一个标量函数,如下所示:
CREATE FUNCTION [dbo].[MaxOrNull](@val1 int, @val2 int)
returns int
as
begin
if @val1 >= @val2 RETURN @val1
if @val1 < @val2 RETURN @val2
RETURN NULL
end
Run Code Online (Sandbox Code Playgroud)
它是最优雅的解决方案,可以在SQL代码中的任何位置使用.