CASE等效于嵌套的IIF语句

时间:2012-07-03 14:55:26

标签: sql

任何人都可以将以下嵌套的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 个答案:

答案 0 :(得分:3)

这应该是等价的:

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

答案 1 :(得分: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

答案 2 :(得分: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

答案 3 :(得分: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