SQL查询(将csv id更改为csv名称)

时间:2013-08-01 10:14:48

标签: sql sql-server

我有这样的查询。

select pid,deptid from table1;

其中deptidvarchar,其值为(1,3,4)

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

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

pid | deptname

1   | dept1,dept4,dept7

2   | dept4,dept9

应该采取什么措施。

2 个答案:

答案 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;

SQL FIDDLE DEMO

<强>输出

pid Depts
-----------------
1   Accts,HR
2   HR
3   HR,IT
4   Accts,HR,IT
相关问题