日期:2014-05-17  浏览次数:20516 次

请教一个如何在函数中循环读出一个SELECT语句的几个字段
是这样子的,我有一个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 函数 循环 替换

------解决方案--------------------
行列转换+字符串连接,以下写法适用于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')
go

select 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 行受影响)
*/

------解决方案--------------------
写法是很多的。



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',&