0

我有一个这样的查询。

select pid,deptid from table1;

其中deptidisvarchar和 value like (1,3,4)

现在我有另一张桌子department(deptid(int,PK), DeptName)

我想而不是从 select 中获取 deptid 我可以在 csv.like 中获取 deptNames

pid | deptname

1   | dept1,dept4,dept7

2   | dept4,dept9

对此应该采取什么方法。

4

2 回答 2

1

假设下面是您的表结构

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;

SQL 小提琴演示

输出

pid Depts
-----------------
1   Accts,HR
2   HR
3   HR,IT
4   Accts,HR,IT
于 2013-08-01T12:15:39.650 回答
0
select t1.pid, t2.DeptName
from table1 t1
join table2 t2 on t1.deptid like concat('%', t2.deptid, '%')

尽管应该指出,像这样在单个列中存储多个值并不是一个好习惯。如果您可以控制表格设计,则应该对其进行更改,以便每列仅包含一个值。它会导致很多问题,加入另一个表的困难只是第一个问题。

于 2013-08-01T10:22:55.607 回答