0

インポートしたこのフラット ファイルがあり、ピボットを解除する必要があります。値がnullの場合でも、ピボットを解除して行を作成したいことを除いて、すべてうまく機能します。

-1 を追加して、-1 を後で置き換えるために、ある種のハックに頼りたくありません。

データベースを使用するソフトウェアは、値が null であっても、フラット ファイルからインポートされた行ごとに常に 3 行あると想定します。

問題を説明するための図

フラットファイルライン

-------------------------------------------------- ---------------
|人のID | コード 1 | 値1 | コード 2 | 値2 | コード3 | 値3|
-------------------------------------------------- ---------------
|123 | hh1 | hh2 | 2 | hh3 | | | | |
-------------------------------------------------- ---------------
私が得るものは

------------------------------
|人のID | コード | 値 |
------------------------------
|123 | hh2 | 2 |
------------------------------
私が欲しいもの


------------------------------
|人のID | コード | 値 |
------------------------------
|123 |hh1 | null | null |
------------------------------
|123 |hh2 | 2 |
------------------------------
|123 |hh3 | null | null |
------------------------------

4

1 に答える 1

0

これはあなたが望む結果を得るためにあなたがしなければならないことを意図したテーブルだと思います。

-------------------------------------------------- ---------------
|人のID| code1 | value1 | code2 | value2 | code3 | value3 |
-------------------------------------------------- ---------------
| 123 | hh1 | NULL | hh2 | 2 | hh3 | NULL |
-------------------------------------------------- ---------------

Unpivot Data Flow Transformationを使用してこれを実行できるかどうかはわかりませんが、非同期出力を使用するスクリプトタスクでこれを簡単に実行できます。非同期出力を使用するには、[入力と出力]の下の変換スクリプトタスクの[出力]プロパティを変更する必要があります。SynchronousInputIDNoneに設定します

その後、次のコードが機能するはずです。

    public override void Input0_ProcessInputRow(Input0Buffer Row)
    {
        Output0Buffer.AddRow();
        Output0Buffer.ID = Row.ID;
        Output0Buffer.Code = Row.Code1;
        Output0Buffer.Value = Row.Value1;

        Output0Buffer.AddRow();
        Output0Buffer.ID = Row.ID;
        Output0Buffer.Code = Row.Code2;
        Output0Buffer.Value = Row.Value2;

        Output0Buffer.AddRow();
        Output0Buffer.ID = Row.ID;
        Output0Buffer.Code = Row.Code3;
        Output0Buffer.Value = Row.Value3;
    }

これにより、1行ごとに3つの新しい行が作成されます。あなたの識別子はIDだと思いました。

于 2012-02-13T22:06:03.560 に答える