nameid=2
2表示的是第二個位置,還是1,2,3,4,5,6中的值2 ?
比如nameid='2,1,5,3,4,6' 假如nameid=2,是對應* 還是--

解决方案 »

  1.   

    create table A(nameid varchar(20),[sign] varchar(20))
    insert into A(nameid,[sign]) values('1,2,3,4,5,6','*,--,*,*,*,--,*')
    go-- 建立一个辅助的临时表就可以了
    SELECT TOP 8000 id = identity(int,1,1) 
    INTO # FROM syscolumns a, syscolumns b    
    SELECT 
        id = identity(int,1,1),
        [sign] = SUBSTRING(A.[sign], B.ID, CHARINDEX(',', A.[sign] + ',', B.ID) - B.ID) 
    into tb1
    FROM A, # B
    WHERE SUBSTRING(',' + a.[sign], B.id, 1) = ','   SELECT
        id = identity(int,1,1), 
        nameid = SUBSTRING(A.nameid, B.ID, CHARINDEX(',', A.nameid + ',', B.ID) - B.ID) 
    into tb2
    FROM A, # B
    WHERE SUBSTRING(',' + a.nameid, B.id, 1) = ','   
    GOselect tb2.nameid , tb1.[sign] from tb2,tb1 where tb1.id = tb2.id
    DROP TABLE A,#,tb1,tb2/*
    nameid               sign                 
    -------------------- -------------------- 
    1                    *
    2                    --
    3                    *
    4                    *
    5                    *
    6                    --(所影响的行数为 6 行)*/
      

  2.   

    --你的内容不匹配,nameid少了一个.create table A(nameid varchar(20),[sign] varchar(20))
    insert into A(nameid,[sign]) values('1,2,3,4,5,6,7','*,--,*,*,*,--,*')
    go-- 建立一个辅助的临时表就可以了
    SELECT TOP 8000 id = identity(int,1,1) 
    INTO # FROM syscolumns a, syscolumns b    
    SELECT 
        id = identity(int,1,1),
        [sign] = SUBSTRING(A.[sign], B.ID, CHARINDEX(',', A.[sign] + ',', B.ID) - B.ID) 
    into tb1
    FROM A, # B
    WHERE SUBSTRING(',' + a.[sign], B.id, 1) = ','   SELECT
        id = identity(int,1,1), 
        nameid = SUBSTRING(A.nameid, B.ID, CHARINDEX(',', A.nameid + ',', B.ID) - B.ID) 
    into tb2
    FROM A, # B
    WHERE SUBSTRING(',' + a.nameid, B.id, 1) = ','   
    GO
    select tb2.nameid , tb1.[sign] from tb2,tb1 where tb1.id = tb2.id
    DROP TABLE A,#,tb1,tb2/*
    id          sign                 
    ----------- -------------------- 
    1           *
    2           --
    3           *
    4           *
    5           *
    6           --
    7           *(所影响的行数为 7 行)
    */
      

  3.   

    dawugui(潇洒老乌龟)太强了,
      
                            ~~~~  学习了。