当前位置: 代码迷 >> Sql Server >> sql语句中,外键ID是多个组成的字符串,念拼接成名称的字符串
  详细解决方案

sql语句中,外键ID是多个组成的字符串,念拼接成名称的字符串

热度:101   发布时间:2016-04-24 08:48:22.0
sql语句中,外键ID是多个组成的字符串,想拼接成名称的字符串
各位老师,我有一个表(50多个列字段),是这样设计的。
ID     DeptID_S
1 10017,10011,10003
2 10012,10011
3 10017,10011,10024,10022
4 10011,10024,10009
5 10011,10003
6 10009
7 10012
第一列为主键,第二列为 多个部门ID拼接的字符串。表达:一个质量问题,可能有一个或N个责任部门。

显示给用户的数据应该为:
ID   部门名称
1 三车间   检验处  技术中心
2 二车间 检验处
3 试飞站 五车间 检验处 技术中心
4 一车间  试飞站 检验处
 
有一个部门表,主要字段为  DeptID, DeptName
请问有什么好的方式可以达到查询的结果?谢谢。
 
 
 
------解决思路----------------------

-- 建议发帖子时,整理一些必须要的数据 

create table test (ID int , DeptID_S varchar(60))
go
insert into test values
(1, '10017,10011,10003'),
(2, '10012,10011'),
(3, '10017,10011,10024,10022'),
(4, '10011,10024,10009'),
(5, '10011,10003'),
(6, '10009'),
(7, '10012')
go
create table dept(deptid varchar(10) ,deptname varchar(30))
go
insert into dept values
('10017','第一部门'),
('10011','XX部门'),
('10003','VVV部门'),
('10024','BBB'),
('10022','DDD'),
('10009','NNN'),
('10012','GGGGGG')
go
with mt as (
select id , deptid , deptname 
  from test , dept
 where ',' + test.DeptID_S + ',' like '%,' + dept.deptid + ',%'
)
select ID , (select deptname + ',' from mt a where a.ID = mt.ID for xml path('') ) dept_name
 from mt
group by ID 
go
drop table dept , test 
go


(7 行受影响)

(7 行受影响)
ID          dept_name
----------- ------------------------------------
1           第一部门,XX部门,VVV部门,
2           XX部门,GGGGGG,
3           第一部门,XX部门,BBB,DDD,
4           XX部门,BBB,NNN,
5           XX部门,VVV部门,
6           NNN,
7           GGGGGG,

(7 行受影响)


  相关解决方案