table1
c1(varchar) c2(varchar)
1,2,3       aa,bb,cc
7,8         hh,ll
9           ii处理tabel1,根据逗号的间隔,使1和aa生成一条记录,2和bb生成一条记录,3和cc生成一条记录。。
生成table2如下:table2
id(int)  name(varchar)
1        aa
2        bb
3        cc
7        hh
8        ll
9        ii本人新新手,求处理语句...

解决方案 »

  1.   

    还有啊,要考虑扩展到三列的情况下table1:
    c1(varchar) c2(varchar) c3(varchar)
    1,2,3       aa,bb,cc    asdf,dfds,afds生成table2:
    id(int) name(varchar) cc3(varchar)
    1       aa            asdf
    2       bb            dfds
    3       cc            afds
      

  2.   

    参考:表: 
    ID(自动增加的)     作者                             机构                                 刊名 
    1                             A,B,C                       D,E,F                         XX 
    2                             H,J,F,I                   Z,Y,W,V                     YY 
    依次类推,作者跟机构可能是2个,或者是3个,没规律 
    我想要实现的功能是: 
    作者                         机构                                         刊名 
    A                           D                                         XX 
    B                           E                                         XX 
    C                           F                                         XX 
    H                           Z                                         YY 
    J                           Y                                         YY 
    F                           W                                         YY 
    I                           V                                         YY 
    数据量大概是20W   条左右,我该怎么实现呢? 
    谢谢您!
    CREATE TABLE tb(ID int,作者 varchar(10),机构 varchar(20),刊名 varchar(10))
    INSERT into tb values(1,'A,B,C',  'D,E,F'  ,'XX') 
    INSERT into tb values(2,'H,J,F,I','ZZ,YY,WWW,VVVV','YY') 
    go
    -- 建立一个辅助的临时表就可以了
    SELECT TOP 8000 id = identity(int,1,1) INTO tmp FROM syscolumns a, syscolumns b   select t1.作者,t2.机构,t1.刊名 from
    (
      select px=(select count(1) from 
      (
        SELECT A.ID, b.id bid,作者 = SUBSTRING(A.作者, B.ID, CHARINDEX(',', A.作者 + ',', B.ID) - B.ID),A.刊名 FROM tb A, tmp B WHERE SUBSTRING(',' + A.作者, B.id, 1) = ','
      ) m where id=t.id and bid<t.bid)+1 , * from 
      (
        SELECT A.ID, b.id bid,作者 = SUBSTRING(A.作者, B.ID, CHARINDEX(',', A.作者 + ',', B.ID) - B.ID),A.刊名 FROM tb A, tmp B WHERE SUBSTRING(',' + A.作者, B.id, 1) = ','
      ) t
    ) t1,
    (
      select px=(select count(1) from 
      (
        SELECT A.ID, b.id bid,机构 = SUBSTRING(A.机构, B.ID, CHARINDEX(',', A.机构 + ',', B.ID) - B.ID) FROM tb A, tmp B WHERE SUBSTRING(',' + A.机构, B.id, 1) = ','
      ) m where id=t.id and bid<t.bid)+1 , * from 
      (
        SELECT A.ID, b.id bid,机构 = SUBSTRING(A.机构, B.ID, CHARINDEX(',', A.机构 + ',', B.ID) - B.ID) FROM tb A, tmp B WHERE SUBSTRING(',' + A.机构, B.id, 1) = ','
      ) t
    ) t2
    where t1.id = t2.id and t1.px = t2.px
    order by t1.id , t1.pxDROP TABLE tb,tmp/*
    作者         机构                   刊名         
    ---------- -------------------- ---------- 
    A          D                    XX
    B          E                    XX
    C          F                    XX
    H          ZZ                   YY
    J          YY                   YY
    F          WWW                  YY
    I          VVVV                 YY(所影响的行数为 7 行)
    */
      

  3.   


    ---如果固定每个字段最多只有3个元素,可以如下:create table table1(c1 varchar(10), c2 varchar(20))
    insert into table1
    select '1,2,3','aa,bb,cc' union all
    select '7,8','hh,ll' union all
    select '9','ii' 
    select parsename(replace(c1,',','.'),1) as id,parsename(replace(c2,',','.'),1) as name into table2 from table1 where parsename(replace(c1,',','.'),1) is not null union  
    select parsename(replace(c1,',','.'),2) as id,parsename(replace(c2,',','.'),2) as name     from table1 where parsename(replace(c1,',','.'),2) is not null union  
    select parsename(replace(c1,',','.'),3) as id,parsename(replace(c2,',','.'),3) as name             from table1 where parsename(replace(c1,',','.'),3) is not nullselect * from table2/*
    id name
    ---------------
    1 aa
    2 bb
    3 cc
    7 hh
    8 ll
    9 ii
    */drop table table1,table2