我有这样的查询。
select pid,deptid from table1
;
其中deptid
为varchar
,其值为(1,3,4)
现在我有另一张表department(deptid(int,PK), DeptName)
我想要而不是从select中获取deptid我可以在csv.like中获得deptNames
pid | deptname
1 | dept1,dept4,dept7
2 | dept4,dept9
应该采取什么措施。
答案 0 :(得分:0)
select t1.pid, t2.DeptName
from table1 t1
join table2 t2 on t1.deptid like concat('%', t2.deptid, '%')
虽然有人应该指出,但在这样的单个列中存储多个值并不是一个好习惯。如果您可以控制表设计,则应更改它,以便每列只包含一个值。它会导致很多问题,加入另一个表的困难只是第一个问题。
答案 1 :(得分:0)
假设下面是你的表结构
Departments
deptid DeptName
------------
1 HR
2 Accts
3 IT
Employee
pid deptid
-----------
1 2,1
2 1
3 1,3
4 2,3,1
试试这个
SELECT pid, Depts = STUFF((SELECT ',' + d.DeptName
FROM @Departments AS d
INNER JOIN @Employees AS ei
ON ',' + ei.deptid + ',' LIKE '%,' + CONVERT(VARCHAR(12), d.deptid) + ',%'
WHERE ei.pid = e.pid
ORDER BY DeptName
FOR XML PATH, TYPE).value('.[1]', 'nvarchar(max)'), 1, 1, '')
FROM @Employees AS e
ORDER BY pid;
<强>输出强>
pid Depts
-----------------
1 Accts,HR
2 HR
3 HR,IT
4 Accts,HR,IT