各位老师,我有一个表(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 行受影响)