1

任何人都可以将以下嵌套 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

任何帮助深表感谢。

4

4 回答 4

3

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
于 2012-07-03T14:59:44.043 回答
1
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
于 2012-07-03T14:59:38.230 回答
0

我认为这可以归结为一个 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
于 2012-07-03T15:07:35.243 回答
0

现在这已经过时了,并且还有其他答案已经有效,但是为了好玩,可以将其编写为一个函数表达式,根本不需要任何 CASE 语句,如下所示:

char(65 + ceiling(ceiling(COALESCE(NULLIF(TABLE_A.Col_1, 0), TABLE_A.Col_2 + (2*TABLE_A.Col_3))) - .5 / 10000000000000))

函数式方法在具有良好索引的大型集合上表现得更好的可能性非常小。

这是我的概念验证测试脚本:

http://sqlfiddle.com/#!3/a95b3/2

于 2015-05-20T16:16:52.383 回答