Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.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 将IIF函数嵌套在MAX函数中_Sql_Sql Server_Tsql - Fatal编程技术网

Sql 将IIF函数嵌套在MAX函数中

Sql 将IIF函数嵌套在MAX函数中,sql,sql-server,tsql,Sql,Sql Server,Tsql,我的任务是分析一个T-SQL函数,该函数在MAX函数中重复嵌套IIF函数。我是否遗漏了什么,或者这根本不会改变输出 DECLARE @firstVal INT = 1; SELECT [NotWrappedIff] = IIF(1=2, @firstVal, NULL) SELECT [MaxWrappedIff] = MAX(IIF(1=2, @firstVal, NULL)) 实际代码中有一个额外的isnull和嵌套的dateadd函数,但结构是相同的。嵌套IIF的假值均为空。实际代码:

我的任务是分析一个T-SQL函数,该函数在MAX函数中重复嵌套IIF函数。我是否遗漏了什么,或者这根本不会改变输出

DECLARE @firstVal INT = 1;
SELECT [NotWrappedIff] = IIF(1=2, @firstVal, NULL)
SELECT [MaxWrappedIff] = MAX(IIF(1=2, @firstVal, NULL))
实际代码中有一个额外的isnull和嵌套的dateadd函数,但结构是相同的。嵌套IIF的假值均为空。实际代码:

SomeIdToKeep = max(iif(isnull(SomeStartTime, SomeOtherStartTime) < @parmStartTime and dateadd(hour, HourIntVal, isnull(SomeStartTime, SomeOtherStartTime)) >= @parmStartTime, SomeId, null))
SomeIdToKeep=max(iif(isnull(SomeStartTime,SomeOtherStartTime)<@parmStartTime和dateadd(hour,HourIntVal,isnull(SomeStartTime,SomeOtherStartTime))>=@parmStartTime,SomeId,null))

您的示例过于简化,这就是它没有意义的原因

代码本身执行条件聚合,即它返回满足由
IIF
确定的条件的行中的
MAX

这可以通过以下方式证明:

declare @Test table (id int, StartDate date, [Value] int);

insert into @Test (id, StartDate, [Value])
values
(1, '01-Feb-2021', 10),
(2, '02-Feb-2021', 20),
(3, '03-Feb-2021', 30);

select
    max([Value]) TrueMax
    , max(iif(StartDate < '03-Feb-2021', [Value], null)) ConditionalMax
from @Test;
declare@testtable(id int,StartDate date,[Value]int);
插入@Test(id,StartDate,[Value])
价值观
(1,'01-Feb-2021',10),
(2,'02-Feb-2021',20),
(3,'03-Feb-2021',30);
选择
最大值([值])TrueMax
,最大值(iif(起始日期<'03-Feb-2021',[Value],null])条件最大值
来自@Test;
返回:

特鲁马克斯 条件性 30 20
假设您的实际查询在某个地方有一个
GROUP BY
,因此
MAX
不是多余的。您的示例代码和实际代码似乎非常不同。没有样本数据很难评论。谢谢,@JeroenMostert函数中不存在GROUP BY。。。奇怪。@DaleK我试图拉出复杂嵌套的外部结构,以隔离有关MAX的问题(忽略isnull和dateadd计算)。我提供了用于上下文的实际代码。我认为为了理解代码,您将其过于简化了。在某些条件下,原始代码似乎是在忽略其他值的同时查找某些值的最大值。但是,如果没有看到数据与条件进行比较,就很难猜测逻辑。不过,在回答您的问题时,我相当肯定
IIF
会导致在
MAX
计算中忽略某些值。