if not object_id('Tab') is null
    drop table Tab
Go
Create table Tab([Col1] int,[COl2] nvarchar(5))
Insert Tab
select 1,N'a,b,c' union all
select 2,N'd,e' union all
select 3,N'f'
GoSQL2000用辅助表:
if object_id('Tempdb..#Num') is not null
    drop table #Num
go
select top 100 ID=Identity(int,1,1) into #Num from syscolumns a,syscolumns b
Select 
    a.Col1,COl2=substring(a.Col2,b.ID,charindex(',',a.Col2+',',b.ID)-b.ID) 
from 
    Tab a,#Num b
where
    charindex(',',','+a.Col2,b.ID)=b.ID --也可用 substring(','+a.COl2,b.ID,1)=','

解决方案 »

  1.   

    select top 100 ID=Identity(int,1,1) into #Num from syscolumns a,syscolumns b
    这句是生成1-100个数Select  
      a.Col1,COl2=substring(a.Col2,b.ID,charindex(',',a.Col2+',',b.ID)-b.ID)  
    from  
      Tab a,#Num b
    where
      charindex(',',','+a.Col2,b.ID)=b.ID
    这句是按逗号切割Tab字段的col2。
      

  2.   

    楼主可以在纸上写几个字符串看看:1、根据where条件可以知道b.ID的值是什么,类似 charindex(',',','+a.Col2,b.ID)=b.ID --也可用 substring(','+a.COl2,b.ID,1)=',',a,b,c
    1 3 52、根据select的查询,可以知道从每个b.ID的值开始截取多少,类似substring(a.Col2,b.ID,charindex(',',a.Col2+',',b.ID)-b.ID)a,b,c,
    1 1 1
      

  3.   

    if not object_id('Tab') is null
      drop table Tab//判断该表是否为空,不为空删掉再创建
    Go
    Create table Tab([Col1] int,[COl2] nvarchar(5))//建表
    Insert Tab
    select 1,N'a,b,c' union all
    select 2,N'd,e' union all
    select 3,N'f'
    Go
     
    下面的楼上已经解释了