SQL Server 2008中的函数类似于mysql中的GREATEST?

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)

  • +1,虽然它比一堆`CASE`语句效率低. (2认同)
  • ++用于2008的VALUES()语法 (2认同)

Iam*_*mIC 5

为此,我创建了一个标量函数,如下所示:

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代码中的任何位置使用.

  • 我可以给你+1.但这是我在SQL 2008之前使用的方法,优先于嵌套的select-max-union.我通常使用的函数更简洁`create function dbo.greater(@a int,@ b int)返回int作为开始返回情况,当@a> = isnull(@ b,@ a)然后@a else @b end end ` (2认同)

Voo*_*ild 1

尝试使用TOP或 代替MAX