Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.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语句的大小写等价物_Sql - Fatal编程技术网

Sql 嵌套IIF语句的大小写等价物

Sql 嵌套IIF语句的大小写等价物,sql,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 IIF(IIF(表A.Col_1=0,表A.Col_2+(2*表A.Col_3),表A.Col_1)CASE 什么

任何人都可以将以下嵌套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(IIF(表A.Col_1=0,表A.Col_2+(2*表A.Col_3),表A.Col_1)
CASE
什么时候
(案例
当表A.Col1=0时
然后是表A.Col2(2*表A.Col3)
ELSE表A.Col1
结束)
案例
什么时候
(案例
当表A.Col1=0时
然后是表A.Col2(2*表A.Col3)
ELSE表A.Col1

结束)这应该是等效的:

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
案例
什么时候
案例
当表A.Col_1=0时
然后是表A.列2+(2*表A.列3)
ELSE表A.Col\u 1

END这应该是等效的:

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
案例
什么时候
案例
当表A.Col_1=0时
然后是表A.列2+(2*表A.列3)
ELSE表A.Col\u 1

END我认为这就是一种情况下的表达:

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
案例

当TABLE_A.Col_1=0和TABLE_A.Col_2+(2*TABLE_A.Col_3)时,我认为这就是它在一种情况下的表达式:

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
案例

当TABLE_A.Col_1=0和TABLE_A.Col_2+(2*TABLE_A.Col_3)时,这已经很旧了,还有其他答案已经可以使用了,但为了好玩,可以将其作为函数表达式编写,而不需要任何CASE语句,如下所示:

char(65 + ceiling(ceiling(COALESCE(NULLIF(TABLE_A.Col_1, 0), TABLE_A.Col_2 + (2*TABLE_A.Col_3))) - .5 / 10000000000000))
函数方法在具有良好索引的大型集合上表现得明显更好的可能性很小

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


这一点现在已经很古老了,还有其他一些答案已经可以使用了,但为了好玩,可以将其作为一个函数表达式编写,而不需要任何CASE语句,如下所示:

char(65 + ceiling(ceiling(COALESCE(NULLIF(TABLE_A.Col_1, 0), TABLE_A.Col_2 + (2*TABLE_A.Col_3))) - .5 / 10000000000000))
函数方法在具有良好索引的大型集合上表现得明显更好的可能性很小

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


@拉斐尔..对如此迅速的反应印象深刻..谢谢!@Raphael..对如此迅速的反应印象深刻..谢谢!