sqlserverダイナミックカラム移行


今日、sqlserver 2012で分析ニーズに遭遇し、動的カラムを転送し、記録します.
 
create table t1 (id int,value varchar(100));
insert into t1 values(1,'a,b,c');
insert into t1 values(2,'a,b,c,d,e');
insert into t1 values(3,'a,b,c,d,e,f,g');
select * from t1;

  
  
1	a,b,c
2	a,b,c,d,e
3	a,b,c,d,e,f,g

 
   
SELECT a.id,b.[values] 
FROM ( 
			SELECT id,[VALUE] = CONVERT(XML , '<v>' + REPLACE(value , ',' , '</v><v>') + '</v>') 
			FROM t1  
		 ) a
OUTER APPLY 
		( SELECT  [values] = N.v.value('.' , 'nvarchar(max)')
           FROM    a.[value].nodes('/v') N ( v )
 	  ) b

   
1	a
1	b
1	c
2	a
2	b
2	c
2	d
2	e
3	a
3	b
3	c
3	d
3	e
3	f
3	g

 
また、valueフィールドに&などxmlが特殊文字の文字がある場合は、CONVERT(XML)を使用するとエラーが発生するので、これらの文字を他の文字に置き換えて、最終結果で置き換えることに注意してください.