m0f*_*0fo 2 sql t-sql sql-server
如何在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
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中不起作用,因为它不支持横向联接。
| 归档时间: |
|
| 查看次数: |
7672 次 |
| 最近记录: |