怎么把下面的表记录
第一列  第二列
  1       a,b,c
  2       r,d
  3       e,w
转变成下面的查询记录
第一列  第二列
  1       a
  2       b
  3       c
  4       r
  5       d
  ...................

解决方案 »

  1.   

    先看看这个:CREATE TABLE A(id INT,country VARCHAR(100))
    INSERT A
    SELECT 1,'中国;日本;韩国' UNION ALL
    SELECT 2,'美国;意大利;法国' UNION ALL
    SELECT 3,'德国'
    SELECT * FROM A-- 建立一个辅助的临时表就可以了
    SELECT TOP 8000 id = identity(int,1,1) 
    INTO # FROM syscolumns a, syscolumns b    
    SELECT 
        A.ID, 
        COUNTRY = SUBSTRING(A.COUNTRY, B.ID, CHARINDEX(';', A.COUNTRY + ';', B.ID) - B.ID) 
    FROM A, # B
    WHERE SUBSTRING(';' + a.COUNTRY, B.id, 1) = ';'   
    ORDER BY 1,2
    GO
    DROP TABLE A,#id          country                                                                                              
    ----------- ---------------------------------------------------------------------------------------------------- 
    1           中国;日本;韩国
    2           美国;意大利;法国
    3           德国(所影响的行数为 3 行)ID          COUNTRY                                                                                              
    ----------- ---------------------------------------------------------------------------------------------------- 
    1           韩国
    1           日本
    1           中国
    2           法国
    2           美国
    2           意大利
    3           德国(所影响的行数为 7 行)
      

  2.   


    declare @sql varchar(4000)
    set @sql=''
    select @sql=@sql+''' union all select '''+replace(col2, ',', ''' union all select ''') from T
    select @sql=@sql+'''', @sql=right(@sql, len(@sql)-12)
    exec(@sql)--result
    ---- 
    a
    b
    c
    r
    d
    e
    w
      

  3.   

    --還有一段SQLcreate table T(col1 int, col2 varchar(20))
    insert T select  1,       'a,b,c'
    union all select 2,     'r,d'
    union all select 3,       'e,w'
      

  4.   

    marco08(天道酬勤) ( ) 只适合在记录少的情况下使用吧
      

  5.   

    就用一下游标吧!!
    游标也不是洪水猛兽啊!!游标里面用这个Splite函数create function f_split(@SourceSql varchar(8000),@StrSeprate varchar(10))
    returns @temp table(FldA varchar(100))
    --实现split功能 的函数
    --date    :2005-4-20
    --Author :Domino
    as 
    begin
        declare @i int
        set @SourceSql=rtrim(ltrim(@SourceSql))
        set @i=charindex(@StrSeprate,@SourceSql)
        while @i>=1
        begin
            insert @temp values(left(@SourceSql,@i-1))
            set @SourceSql=substring(@SourceSql,@i+1,len(@SourceSql)-@i)
            set @i=charindex(@StrSeprate,@SourceSql)
        end
        if @SourceSql<>'\'
           insert @temp values(@SourceSql)
        return 
    end
      

  6.   

    在游标里面用insert tableNew
    select * from dbo..f_split(@OldContry,';')