sql >> データベース >  >> RDS >> Sqlserver

SQL の CASE 式を SSIS の派生列に変換する

    次の話の教訓は、あなたができるという理由だけで

    適切な例として、このクエリがあります。 SSIS で派生列やスクリプト タスクを使用するよりも、既存の SQL ロジックを使用して最終値を生成する方がはるかに効率的です (パイプライン メモリ、CPU などの無駄は言うまでもありません)

    ソース クエリ

    以下をソース クエリとして使用しました。

    SELECT '50%' AS FixedARMRateReductionLimit, .1 AS PARAM_VAL_TXT
    UNION ALL  SELECT 'Weekly PMMS Rate' AS FixedARMRateReductionLimit, .3 AS PARAM_VAL_TXT
    UNION ALL  SELECT 'Frack',  .5
    

    パーセント ポジションを見つける

    パーセント記号が列に存在するかどうかを判断します。これにより、PercentPosition という列が作成されます

    FINDSTRING(FixedARMRateReductionLimit, "%",1)
    

    料金テキストを確認

    最初の式が示すように単純な比較を行うだけで十分なはずですが、問題がありました。 文字列変換/比較 だと思います 問題 (最初の注を参照)。ブール値を取得するのではなく、findstring を使用して序数の位置を生成しました。

    FixedARMRateReductionLimit == "'Weekly PMMS Rate"
    FINDSTRING(FixedARMRateReductionLimit,"Weekly PMMS Rate",1)
    

    派生出力

    三項演算子 の二重使用をお楽しみください .

    (RateTextPosition > 0) ? (PARAM_VAL_TXT) : (PercentPosition == 0) ? .2 : ((DT_NUMERIC, 18,2) SUBSTRING(FixedARMRateReductionLimit,1,PercentPosition - 1))/100
    

    スクリプト タスクでこれの一部を簡略化することもできますが、ソースでロジックを実行するだけです。



    1. SQL Serverで既存の列を計算列に変更する(T-SQLの例)

    2. ベーステーブルから行を削除すると、そのテーブルのビューに影響しますか?

    3. 動的カーソルを使用した中央値の計算

    4. PostgreSQLでのPi()のしくみ