在案例表达式结果上使用ISNULL()

时间:2018-09-19 11:31:28

标签: sql sql-server case isnull

我有一个大写的表达式

例如

section

现在[Test]列返回一些NULL。我该如何用(ISNULL,'')包装此CASE表达式,以便如果为NULL则为空白?

用非常大的case语句完成此操作的最干净方法是什么?

4 个答案:

答案 0 :(得分:2)

我可能没有抓住重点,但是你有不喜欢的事情

request.query_params

答案 1 :(得分:1)

只需用ISNULL包装整个表达式:

ISNULL(
CASE WHEN ... THEN ... ELSE
CASE WHEN ... THEN ... ELSE '' END ELSE '' END +
CASE WHEN ... THEN ... ELSE
CASE WHEN ... THEN ... ELSE '' END ELSE '' END,'') as [Test]

或者,您可以使用CONCAT,但是,这会稍微改变查询的逻辑。如果一个表达式没有返回NULL,而另一个表达式返回了,那么您现在将获得一个值。 NULL + {Non NULL Expression} = NULL,但是,CONCAT(NULL,{Non NULL Expression}) = {Non NULL Expression}。:

CONCAT(
CASE WHEN ... THEN ... ELSE
CASE WHEN ... THEN ... ELSE '' END ELSE '' END,
CASE WHEN ... THEN ... ELSE
CASE WHEN ... THEN ... ELSE '' END ELSE '' END) as [Test]

CONCAT将永远不会返回NULL。如果每个表达式的值均为NULL,则返回一个空字符串((n)varchar)。

答案 2 :(得分:1)

我会做的:

SELECT ISNULL([Test], '')
FROM table t CROSS APPLY
     ( VALUES (CASE WHEN ... THEN ... ELSE
               CASE WHEN ... THEN ... ELSE '' END ELSE '' END +
               CASE WHEN ... THEN ... ELSE
               CASE WHEN ... THEN ... ELSE '' END ELSE '' END)
     ) tt ([Test]);

但是,您也可以将ISNULL()应用于整个大型案例表达式:

SELECT ISNULL((CASE WHEN ... THEN ... ELSE
               CASE WHEN ... THEN ... ELSE '' END ELSE '' END +
               CASE WHEN ... THEN ... ELSE
               CASE WHEN ... THEN ... ELSE '' END ELSE '' END), ''
              )
. . . 

APPLY的唯一优点是您可以在任何地方或多次使用[Test]列。

答案 3 :(得分:0)

我认为最好的方法是将函数用于大写语句,这对您来说更易读。并且更容易实现您的解决方案。