4

我有两列ActivityCountParentValue. 我创建了一个表达式:

ROUND((ActivityCount / ParentValue) / 100,16) * 100 

但问题是它返回NULL某些列,我想NULL0. 我似乎找不到答案。

4

4 回答 4

8

表达:

ISNULL(ParentValue) || (ParentValue == 0) ? 0 : ROUND(ISNULL(ActivityCount) ? 0 : ActivityCount / ParentValue / 100,16) * 100

为了可读性:

ISNULL(ParentValue) || (ParentValue == 0) 
    ? 0 
    : ROUND((ISNULL(ActivityCount) 
                ? 0 
                : ActivityCount / ParentValue) / 100
             , 16) * 100

它能做什么:

  • 如果ParentValuefield isNULL或 has Zero,您不必执行计算,因为您会遇到Divide by Zero错误。因此,只需返回0即可退出表达式。

  • 如果ActivityCount字段为NULL,则在执行计算之前将其替换为零。

推荐:

如果可能,我建议COALESCE在源查询上使用零值和计算替换 NULL 值。

于 2013-02-21T15:13:40.473 回答
2

使用ISNULL(SSIS,而不是 SQL 表达式)进行测试,使用条件运算符

ISNULL(ROUND((ActivityCount / ParentValue) / 100,16) * 100) ? 0 : ROUND((ActivityCount / ParentValue) / 100,16) * 100
于 2013-02-21T14:53:00.147 回答
2

试试下面...它会帮助你...

ISNULL(ROUND((ActivityCount / ParentValue) / 100,16) * 100) || (ROUND((ActivityCount / ParentValue) / 100,16) * 100)= "" ? 0 : ROUND((ActivityCount / ParentValue) / 100,16
于 2013-02-21T14:55:59.720 回答
2

我会说:

ISNULL(ActivityCount) || ISNULL(ParentValue) ? 0 : ROUND((ActivityCount/ParentValue)/100,16)*100

这样,您正在测试将导致 NULL 结果的最简单情况,而不是在条件中多次计算最终情况。

(话虽这么说,任何这些在技术上都可以工作。)

于 2013-02-21T15:13:02.170 回答