是这样子的,我有一个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函数循环替换
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函数循环替换
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 行受影响)
*/
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