4

と の 2 つの列がActivityCountありParentValueます。式を作成しました:

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

機能:

  • ParentValueフィールドがNULLまたはの場合、エラーZeroが発生するため、計算を実行する必要はありませんDivide by Zeroしたがって、単に0を返して式を終了します。

  • ActivityCountフィールドがの場合NULL、計算を実行する前にゼロに置き換えます。

おすすめ:

COALESCE可能であれば、ソース クエリで NULL 値をゼロに置き換えて計算することをお勧めします。

于 2013-02-21T15:13:40.473 に答える
2

ISNULL (SQL 式ではなく SSIS) でテストし、条件演算子を使用します。

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 に答える