如何在 Sql Server 中获得 3 个值中的最低值?
同一个函数在 MySQL 中叫 LEAST,在 SQL Server 中比较?
最佳答案
您可以在没有嵌套案例的情况下执行此操作:
select (case when val1 < val2 and val1 < val3 then val1
when val2 < val3 then val2
else val3
end) as least_of_three
这似乎很清楚它在做什么。它也很容易概括。
一定要小心 NULL - LEAST 和 GREATEST 会忽略它们。如果需要处理这些,那就麻烦一点了:
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
请注意,我已将“<”更改为“<=”。我使用合并通过评估为真来“忽略”该值。因此,如果 val2 为空,则 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);
请注意,此解决方案在 MySQL 中不起作用,因为它不支持横向连接。
关于sql - 从 SQL SERVER 中的 3 个值中获取较低的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10569766/