select ygbh,substring(zw,n.i,1) as zw
from ygb
,
(
select 1 as i
union all
select 2
union all
select 3
union all
select 4
union all
select 5
union all
select 6
union all
select 7
union all
select 8
union all
select 9
union all
select 10
) N
where substring(zw,n.i,1) <> ''
      and substring(zw,n.i,1) <> ','
order by ygbh

解决方案 »

  1.   

    --创建一个处理的临时表
    select top 8000 id=identity(int,1,1) into #t from syscolumns a,syscolumns b--进行处理
    select ygbh,zw=substring(zw,id,charindex(',',zw+',',id)-id)
    from ygb a join #t b on substring(','+zw,id,1)=','
      

  2.   

    --测试--测试数据
    create table ygb(ygbh int,zw varchar(8000))
    insert ygb select 1,'1,3'
    union  all select 2,'1'
    union  all select 3,'2,3,5'
    go--创建一个处理的临时表
    select top 8000 id=identity(int,1,1) into #t from syscolumns a,syscolumns b--进行处理
    select ygbh,zw=substring(zw,id,charindex(',',zw+',',id)-id)
    from ygb a join #t b on substring(','+zw,id,1)=','
    go--删除测试
    drop table ygb,#t/*--测试结果ygbh        zw        
    ----------- ----------
    1           1
    1           3
    2           1
    3           2
    3           3
    3           5(所影响的行数为 6 行)--*/
      

  3.   

    结果出来了,可是不能建视图啊,请zjcxc(邹建)帮忙试一下了!
      

  4.   

    create view  zv_test
    as
    select ygbh
    ,substring(zw,n.i,charindex(',',zw+',',n.i)-n.i) as zw
    from ygb
    ,
    (
    select 1 as i
    union all
    select 2
    union all
    select 3
    union all
    select 4
    union all
    select 5
    union all
    select 6
    union all
    select 7
    union all
    select 8
    union all
    select 9
    union all
    select 10
    ) Nwhere substring(','+zw,n.i,1) = ','
      

  5.   

    select ygbh,zw,
    1 + n.i + m.i * 10
    ,substring(zw,1 + n.i + m.i * 10 ,case when charindex(',',zw+',',1 + n.i + m.i * 10 ) >= (1 + m.i + n.i * 10) then charindex(',',zw+',',1 + n.i + m.i * 10 ) - (1 + m.i + n.i * 10) else  (1 + m.i + n.i * 10) end
              ) as zw
    from 
    ygb
    ,
    (
    select 0 as i
    union all
    select 1
    union all
    select 2
    union all
    select 3
    union all
    select 4
    union all
    select 5
    union all
    select 6
    union all
    select 7
    union all
    select 8
    union all
    select 9
    ) M
    ,
    (
    select 0 as i
    union all
    select 1
    union all
    select 2
    union all
    select 3
    union all
    select 4
    union all
    select 5
    union all
    select 6
    union all
    select 7
    union all
    select 8
    union all
    select 9) Nwhere substring(','+zw,1 + n.i + m.i * 10,1) = ','