生成一个类似于每列数据组合关联的笛卡尔集?

解决方案 »

  1.   

    create table old1
    (id1 varchar(10),name1 varchar(20),
     id2 varchar(10),name2 varchar(20),
     id3 varchar(10),name3 varchar(20),
     id4 varchar(10),name4 varchar(20),
     id5 varchar(10),name5 varchar(20),
     id6 varchar(10),name6 varchar(20))
    create table ntable1(nid varchar(100),nname varchar(100))
    go
    insert into old1
    values ('07','产成品','01','成品锅','11','复底锅','101','双耳','01','切边','5*12.5','5 x 12.5锅' )insert into old1(id2,name2,id3,name3,id4,name4,id5,name5)
    values ('02','进口成品锅','12','单底锅','102','单柄','02','宽边' )insert into old1(id2,name2,id3,name3,id4,name4,id5,name5)
    values ('03','国内成品锅','13','复合锅','103','线耳','03','反边' )--insert数据
    insert into ntable1 
    select distinct id1,name1 from old1 
    where id1 is not nullinsert into ntable1 
    select distinct a.nid+'.'+b.id2,b.name2 from ntable1 a,old1 b 
    where id2 is not nullinsert into ntable1 
    select distinct a.nid+'.'+b.id3,b.name3 from ntable1 a,old1 b 
    where id3 is not null and (len(a.nid)-len(replace(a.nid,'.','')))=1insert into ntable1 
    select distinct a.nid+'.'+b.id4,b.name4 from ntable1 a,old1 b 
    where id4 is not null and (len(a.nid)-len(replace(a.nid,'.','')))=2insert into ntable1 
    select distinct a.nid+'.'+b.id5,b.name5 from ntable1 a,old1 b 
    where id5 is not null and (len(a.nid)-len(replace(a.nid,'.','')))=3insert into ntable1 
    select distinct a.nid+'.'+b.id6,b.name6 from ntable1 a,old1 b 
    where id6 is not null and (len(a.nid)-len(replace(a.nid,'.','')))=4
    --insert操作结果自己看
    select * from ntable1
    go--删除测试数据
    drop table ntable1,old1