嗨朋友我对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中解决这个问题。答案 0 :(得分:0)
如果您使用的是SSIS,则可以使用多播,例如地图
pn | cpt1 | modi11
到结果集,对所有这些执行此操作,
pn | cpt2 | modi21等。
然后使用union任务并将它们放在一起。
答案 1 :(得分:0)
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(故意留给你; - )