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

标签 sql sql-server tsql

如何在 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/

相关文章:

mysql - 插入数据时,插入语句与外键约束冲突

sql - 建立2个表之间的一对多关系

sql - TSQL:无法对 COUNT(*) 执行聚合函数 AVG 来查找一天中最繁忙的时间

sql - HL7 使用 SQL 编程的护理文档 (CCD) 开发的连续性

sql - 使用 PIVOT 选择列值作为列

SQL - 我是否应该使用联结表?

mysql - 使用两个 IF block 触发

mysql - 为每个结果创建表行

sql - 修剪sql server中的左侧字符?

sql - 不明确的列名错误,如何修复?