请帮我在ssis中添加列

时间:2014-03-25 02:25:52

标签: ssis

嗨朋友我对ssis有一点疑问请告诉我如何在sql server中解决这个问题。

表:患者

pn | cpt1 |cpt2 | cpt3| modi12  | modi13  | modi22 | modi33 | mod31|modi11
1  |100   |200  |300  |  a      |         |g       |  k     | v    |q
2  |101   |400  |450  |  h      |   b     |        |        | m    |

这里modi13表示带有cpt3的modfiere1 modi12表示带cpt2的modifier1 modi22表示带cpt2的修饰符2 modi33表示带cpt3的修饰符3 modi31表示带cpt1的modifier3 modi11表示带cpt1的modifier1 modi13表示带cpt3的modifier1

根据这个条件,我需要像这样输出

       pn  |   cpt   |    modifier1    |   modifier2  | modifier3
       1   |   100   |     q           |             |v
       2   |   101   |                 |             |m
       1   |   200   |     a           |  g          |
       2   |   400   |     h           |             |
       1   |   300   |                 |             |k
       2   |   450   |     b           |             |

我试过cpt1,cpt2,cpt3信息存储在cpt中使用unpivot。但这里问题是我如何替换相应的modfier1和modifier2以及modifier3值信息。 从中选择cpt  (从患者中选择pn,cpt1,cpt2,cpt3)main  逆透视   (cpt为(cpt1,cpt2,cpt3)中的cptvalues)sub,那时我只得到pn对应的cpt值。

请告诉我。如何在ssis中解决这个问题。

2 个答案:

答案 0 :(得分:0)

如果您使用的是SSIS,则可以使用多播,例如地图

pn | cpt1 | modi11

到结果集,对所有这些执行此操作,

pn | cpt2 | modi21等。

然后使用union任务并将它们放在一起。

答案 1 :(得分:0)

enter image description here

public override void Input0_ProcessInputRow(Input0Buffer Row)
{
    int pn = Row.pn;
    int cpt1 = Row.cpt1;
    int cpt2 = Row.cpt2;
    int cpt3 = Row.cpt3;
    string modi11 = Row.modi11;
    string modi12 = Row.modi12;
    string modi13 = Row.modi13;
    string modi22 = Row.modi22;
    string modi31 = Row.modi31;
    string modi33 = Row.modi33;

    ///modi11 means modifier1 with cpt1 
    ///modi31 means modifier3 with cpt1
    Output0Buffer.AddRow();
    Output0Buffer.pn = pn;

    Output0Buffer.cpt = cpt1;
    Output0Buffer.modifier1 = modi11;
    //Output0Buffer.modifier2 = modi21;
    Output0Buffer.modifier3 = modi31;

    ///modi12 means modifier1 with cpt2 
    ///modi22 means modifier2 with cpt2 
    Output0Buffer.AddRow();
    Output0Buffer.pn = pn;

    Output0Buffer.cpt = cpt2;
    Output0Buffer.modifier1 = modi12;
    Output0Buffer.modifier2 = modi22;
    //Output0Buffer.modifier3 = modi32;

    ///modi13 means modfiere1 with cpt3 
    ///modi33 means modifier3 with cpt3
    Output0Buffer.AddRow();
    Output0Buffer.pn = pn;

    Output0Buffer.cpt = cpt1;
    Output0Buffer.modifier1 = modi13;
    //Output0Buffer.modifier2 = modi23;
    Output0Buffer.modifier3 = modi33;
}

注意:添加代码以处理null(故意留给你; - )