0

我有这个我导入的平面文件,它需要被取消透视。一切都很好,除了我希望 unpivot 使行即使值为空。

我不想诉诸某种技巧来添加 -1 并在之后替换 -1。

使用数据库的软件期望从平面文件导入的每一行总是有 3 行,即使它的值为 null。

一些图来解释问题

平面文件线

-------------------------------------------------- ---------------
|人的身份证| 代码1 | 值1 | 代码2 | 值2 | 代码3 | 值3|
-------------------------------------------------- ---------------
|123 | hh1 | hh2 | 2 | hh3 | | |
-------------------------------------------------- ---------------
我得到的是

------------------------------
|人的身份证| 代码 | 价值 |
------------------------------
|123 | hh2 | 2 |
------------------------------
我想要的是


------------------------------
|人的身份证| 代码 | 价值 |
------------------------------
|123 |hh1 | 空 |
------------------------------
|123 |hh2 | 2 |
------------------------------
|123 |hh3 | 空 |
------------------------------

4

1 回答 1

0

我认为这是你想要得到你想要的结果的表。

-------------------------------------------------- ---------------
|人的身份证| 代码1 | 值1 | 代码2 | 值2 | 代码3 | 值3|
-------------------------------------------------- ---------------
|123 | hh1 | 空 | hh2 | 2 | hh3 | 空 |
-------------------------------------------------- ---------------

如果您可以使用Unpivot数据流转换来执行此操作,我不肯定,但是您可以在具有异步输出的脚本任务中轻松完成此操作。要使用异步输出,您必须更改Inputs 和 Outputs下转换脚本任务的 Output 属性。将SynchronousInputID设置为

之后,以下代码应该适合您。

    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 回答