从SQL SERVER的3个值中获取较低的值

m0f*_*0fo 2 sql t-sql sql-server

如何在Sql Server中获得3个值中的最低值?

MySQL中的相同功能称为LEAST,而SQL Server中的功能是否比较?

Gor*_*off 6

您可以在没有嵌套大小写的情况下执行此操作:

select (case when val1 < val2 and val1 < val3 then val1
             when val2 < val3 then val2
             else val3
        end) as least_of_three
Run Code Online (Sandbox Code Playgroud)

这看起来很清楚。它也很容易泛化。

请注意NULL-最小和最大忽略。如果您需要处理这些问题,那么会比较麻烦:

select (case when val1 <= coalesce(val2, val1) and val1 <= coalesce(val3, val1) then val1
             when val2 <= coalesce(val3, val2) then val2
             else val3
        end) as least_of_three
Run Code Online (Sandbox Code Playgroud)

注意,我已将“ <”更改为“ <=”。我使用合并通过评估为true来“忽略”该值。因此,如果val2为null,则val1始终小于val2。我选择此方法是因为它适用于所有数据类型(字符串,数字,日期)。

编辑:

我通常不回去写关于七岁问题的答案,但是这个问题显然是SQL Server。最佳方法使用apply

select t.*, max_val
from t cross apply
     (select max(v.val) as max_val
      from (values (t.val1), (t.val2), . . .
     ) v(val);
Run Code Online (Sandbox Code Playgroud)

注意,该解决方案在MySQL中不起作用,因为它不支持横向联接。