--> 测试数据: #T
if object_id('tempdb.dbo.#T') is not null drop table #T
create table #T (productId varchar(9),keywords varchar(20),productName varchar(11))
insert into #T
select '01','mp3,mp4,mp5','音乐播放器' union all
select '02','video','视频播放器'select top 20 id=identity(int,1,1) into # from syscolumns aselect substring(a.keywords,b.id,charindex(',',a.keywords+',',b.id)-b.id) s
from #T a,# b
where substring(','+a.keywords,b.id,1)=','
  

解决方案 »

  1.   

    liangCK ->大哥, 可否给个链接啊....我看过好几个行列转换的例子, 似呼都达不到我上面的要求啊.....
      

  2.   

    --> 测试数据: #T
    if object_id('tempdb.dbo.#T') is not null drop table #T
    create table #T (productId varchar(9),keywords varchar(20),productName varchar(11))
    insert into #T
    select '01','mp3,mp4,mp5','音乐播放器' union all
    select '02','video','视频播放器'select top 20 id=identity(int,1,1) into # from syscolumns aselect id=identity(int,1,1),substring(a.keywords,b.id,charindex(',',a.keywords+',',b.id)-b.id) keyword
    into #temp
    from #T a,# b
    where substring(','+a.keywords,b.id,1)=','select * from #tempdrop table #T,#,#temp/*
    id          keyword
    ----------- --------------------
    1           mp3
    2           mp4
    3           mp5
    4           video(4 行受影响)
    */
      

  3.   

    问题描述:有表tb, 如下:id          values----------- -----------1           aa,bb
    2           aaa,bbb,ccc欲按,分拆values列, 分拆后结果如下:id          value----------- --------1           aa
    1           bb
    2           aaa
    2           bbb
    2           ccc
    1. 旧的解决方法SELECT TOP 8000 
        id = IDENTITY(int, 1, 1) 
    INTO # 
    FROM syscolumns a, syscolumns b
    SELECT 
        A.id, 
        SUBSTRING(A.[values], B.id, CHARINDEX(',', A.[values] + ',', B.id) - B.id)
    FROM tb A, # B
    WHERE SUBSTRING(',' + A.[values], B.id, 1) = ','
     
    DROP TABLE #-- 2. 新的解决方法 -- 示例数据DECLARE @t TABLE(id int, [values] varchar(100))
    INSERT @t SELECT 1, 'aa,bb'
    UNION ALL SELECT 2, 'aaa,bbb,ccc'
    -- 查询处理SELECT 
        A.id, B.value
    FROM(
        SELECT id, [values] = CONVERT(xml,
                '<root><v>' + REPLACE([values], ',', '</v><v>') + '</v></root>')
        FROM @t
    )A
    OUTER APPLY(
        SELECT value = N.v.value('.', 'varchar(100)')
        FROM A.[values].nodes('/root/v') N(v)
    )B
     /*--结果id          value----------- --------1           aa
    1           bb
    2           aaa
    2           bbb
    2           ccc
    (5 行受影响)--*/
    CSDN 社区帖子地址 附: 合并与分拆的CLR, sql2005的示例中有:
    在安装sql 2005的示例后,默认安装目录为 drive:\Program Files\Microsoft SQL Server\90\Samples\Engine\Programmability\CLR\StringUtilities中
      

  4.   

    谢谢liangCK , 真是热心人....
    在哪儿啊! 如果在深圳, 请你请饭啊.... 呵呵...CSDN怎么搞的, 结贴怎么给的都是0分...