Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在SQL SERVER中获取3个值中的较低值_Sql_Sql Server_Tsql - Fatal编程技术网

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

在SQL SERVER中获取3个值中的较低值,sql,sql-server,tsql,Sql,Sql Server,Tsql,如何在Sql Server中获得3个值中的最低值 MySQL中的相同函数称为LEAST,SQL Server中的比较?您可以在T-SQL中使用“Min”函数: SELECT MIN(Value) FROM MyTable 如果要避免嵌套CASE语句,可以这样做(尽管有点尴尬): 最明显的嵌套case语句是: select case when val1 < val2 then case when val1 < val3 then val1

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

MySQL中的相同函数称为LEAST,SQL Server中的比较?

您可以在T-SQL中使用“Min”函数:

SELECT MIN(Value) FROM MyTable

如果要避免嵌套CASE语句,可以这样做(尽管有点尴尬):


最明显的嵌套case语句是:

select case when val1 < val2 then
               case when val1 < val3 then val1
               else val3
               end
        when val2 < val3 then val2
               else val3
    end
from cols;
它不会很容易地扩展到更高的比较级别,并且它不包括用于抑制空值的合并语句


唯一的优点是,当另一个程序员查看您的代码时,他们能够快速地理解它。(除非这是一个性能瓶颈,否则我认为这是一个很好的考虑!)

SQL server中没有类似于mysql中的Least()函数的函数

MySQL的Least()函数执行以下操作

获取两个或多个参数,返回最小值(最小值) 论点使用以下规则比较参数:

如果任何参数为NULL,则结果为NULL。不需要进行比较

如果返回值用于整数上下文或所有参数都是 整数值,它们作为整数进行比较

如果返回值用于实际上下文或所有参数都是 实值,它们作为实数进行比较

如果参数由数字和字符串组成,则它们是 作为数字比较

如果任何参数是非二进制(字符)字符串,则参数为 与非二进制字符串进行比较

在所有其他情况下,参数作为二进制字符串进行比较

sql server的Min()函数返回表中列的最小值 它不需要争论

这是一个模拟,但它仍然不像,因为它只能接受整数

CREATE FUNCTION [dbo].[GetSmallest]
(
    -- Add the parameters for the function here
    @val1 int,  @val2 int,  @val3 int
)
RETURNS int
AS
BEGIN
Declare @result int
set @result = case when @val1 < @val2 then
               case when @val1 < @val3 then 
                @val1
               else
                @val3
               end
        when @val2 < @val3 then 
                @val2
        else
                 @val3
    end
  return @result  
END 

您可以在不使用嵌套大小写的情况下执行此操作:

select (case when val1 < val2 and val1 < val3 then val1
             when val2 < val3 then val2
             else val3
        end) as least_of_three

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

他询问的是跨列联接。最大和最小的函数。就个人而言,如果我是另一个程序员,我更愿意阅读一条有用的注释,告诉我代码的作用,而不是必须“弄清楚”嵌套的CASE语句(如果你不知道意图,即使是“简单”的语句也可能不清楚)。@Pondlife我经常使用遗留代码库。我无法告诉您我发现有多少次代码在没有更改注释的情况下被更改。代码库越老,我就越不相信这些评论。因此,解释某事的评论越少越好。YMMV请使用
UNION ALL
而不是
UNION
。使用
UNION
将迫使SQLServer使用
工作表
“非常容易概括”,除了查询lol的O(N平方)长度之外
CREATE FUNCTION [dbo].[GetSmallest]
(
    -- Add the parameters for the function here
    @val1 int,  @val2 int,  @val3 int
)
RETURNS int
AS
BEGIN
Declare @result int
set @result = case when @val1 < @val2 then
               case when @val1 < @val3 then 
                @val1
               else
                @val3
               end
        when @val2 < @val3 then 
                @val2
        else
                 @val3
    end
  return @result  
END 
SELECT [dbo].[GetSmallest] (   32  ,31  ,6)
select (case when val1 < val2 and val1 < val3 then val1
             when val2 < val3 then val2
             else val3
        end) as least_of_three
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
select t.*, max_val
from t cross apply
     (select max(v.val) as max_val
      from (values (t.val1), (t.val2), . . .
     ) v(val);