任何人都可以将以下嵌套 IIF 解码为 SQL 中的 CASE 语句。我知道 SQL Server 2012 中允许使用 IIF,但我发现很难轻松掌握嵌套 IIF 逻辑。以下是我的嵌套 IIF 语句
IIF(IIF(TABLE_A.Col_1 = 0, TABLE_A.Col_2 + (2*TABLE_A.Col_3), TABLE_A.Col_1)<=.5, 'A', 'B') AS Result
任何帮助深表感谢。
任何人都可以将以下嵌套 IIF 解码为 SQL 中的 CASE 语句。我知道 SQL Server 2012 中允许使用 IIF,但我发现很难轻松掌握嵌套 IIF 逻辑。以下是我的嵌套 IIF 语句
IIF(IIF(TABLE_A.Col_1 = 0, TABLE_A.Col_2 + (2*TABLE_A.Col_3), TABLE_A.Col_1)<=.5, 'A', 'B') AS Result
任何帮助深表感谢。
This should be the equivalent:
CASE
WHEN
CASE
WHEN TABLE_A.Col_1 = 0
THEN TABLE_A.Col_2 + (2*TABLE_A.Col_3)
ELSE TABLE_A.Col_1
END <= .5
THEN 'A'
ELSE 'B'
END As Result
CASE
WHEN
(CASE
WHEN TABLE_A.Col1= 0
THEN TABLE_A.Col2_2 + (2*TABLE_A.Col3)
ELSE TABLE_A.Col1
END) <=0.5
THEN 'A'
ELSE 'B'
END
AS result
我认为这可以归结为一个 CASE 表达式:
CASE
WHEN TABLE_A.Col_1 = 0 AND TABLE_A.Col_2 + (2*TABLE_A.Col_3) <= .5 THEN 'A'
WHEN TABLE_A.Col_1 <> 0 AND TABLE_A.Col_1 <= .5 THEN 'A'
ELSE 'B'
END
现在这已经过时了,并且还有其他答案已经有效,但是为了好玩,可以将其编写为一个函数表达式,根本不需要任何 CASE 语句,如下所示:
char(65 + ceiling(ceiling(COALESCE(NULLIF(TABLE_A.Col_1, 0), TABLE_A.Col_2 + (2*TABLE_A.Col_3))) - .5 / 10000000000000))
函数式方法在具有良好索引的大型集合上表现得更好的可能性非常小。
这是我的概念验证测试脚本: