是这样子的,我有一个A表,表里有字段:
id   name     code
xx   工程师      001
xx   建筑师      002
xx   设计师      003另还有B表
id   name    code
xx   张三      001,002
xx   李四      002,003
xx   王五      003,001我要把b表的code转成中文输出,暂时我自己有两个思路:
思路一:
在函数中有输入变量@a,这个输入变量@a就是B表的CODE,如'001,003',这个输入变量,来自于调有这个函数的SELECT语句。然后在函数里,select code from a表的code字段,然后循环读取的有结果,把得到的code,replace在函数输入变量@a,把替换后的中文结果返回出去。思路二:只写一个select语句,即可以达成以下效果,不过我不会怎样写
id   name    code        codecn
xx   张三      001,002     工程师,建筑师
xx   李四      002,003     建筑师,设计师
xx   王五      003,001     设师师,工程师大家如果有另外的思路也行,能完成所需的效果就可以了,不过不能用存储过程,因为我要这个函数的输出结果,直接用在另外一个select语句中,谢谢大家sql函数循环替换

解决方案 »

  1.   

    行列转换+字符串连接,以下写法适用于2005及以上版本
    create table ta(code varchar(10),name varchar(10))
    insert into ta values('01', 'A公司') 
    insert into ta values('02', 'B公司') create table tb(code varchar(10),linkname varchar(10))
    insert into tb values('01', 'aaa') 
    insert into tb values('01', 'bbb') 
    insert into tb values('01', 'ccc') 
    insert into tb values('02', 'ddd') 
    insert into tb values('02', 'eee')
    goselect a.code,a.name,b.linkname
    from ta a inner join
      (SELECT distinct code,
    STUFF((SELECT ',' + linkname AS [text()] 
            FROM tb n  
            WHERE n.code = m.code
            FOR XML PATH('')), 1, 1, '') as linkname
      FROM tb m 
      ) b ON b.code=a.code 
    /*
    code      name      linkname
    ---------- ---------- --------------
    01        A公司        aaa bbb ccc
    02        B公司        ddd eee
    (2 行受影响)
    */
      

  2.   

    2楼的兄弟,你没看清我的题目啊,字段的内容与结构都不一样,我的CODE字段是有,分隔,含有另外一个对照表的多个字段的多对多关系
      

  3.   

    写法是很多的。drop table ta,tb
    go
    create table ta(code varchar(10),name varchar(10))
    insert into ta values('01,02', 'A公司') 
    insert into ta values('02,03,01', 'B公司') 
     
    create table tb(code varchar(10),linkname varchar(10))
    insert into tb values('01', 'aaa') 
    insert into tb values('02', 'bbb') 
    insert into tb values('03', 'ccc') go
     
    SELECT * FROM ta m
    CROSS APPLY
    (SELECT
            STUFF((SELECT ',' + linkname AS [text()] 
            FROM  tb n  
            WHERE ',' + m.code + ',' like '%,' + n.code + ',%'
            FOR XML PATH('')), 1, 1, '') as linkname
    ) bselect code,name, lname=stuff((select ','+linkname from tb b where ',' + a.code + ',' like '%,' + b.code + ',%' for xml path('')), 1, 1, '')
    from ta a
    group by code,name
      

  4.   

    select b.*,stuff((select ','+a.name from a where charindex(','+code+',',','+b.code+',')>0 for xml path('')),1,1,'')codecn from b