2013-08-01 23 views
0

我有這樣的查詢。SQL查詢(將csv編號更改爲csv名稱)

select pid,deptid from table1;

其中deptidvarchar和像(1,3,4)

值現在我有另一個表作爲department(deptid(int,PK), DeptName)

我想不是GET DEPTID從選擇,我可以在csv.like得到deptNames

pid | deptname 

1 | dept1,dept4,dept7 

2 | dept4,dept9 

這個應該怎麼辦

+0

每個PID的每個pid或逗號分隔的一個deptname名稱? – user1429899

+2

哦,上帝,另一個連接問題,一分鐘前我標記另一個作爲副本... – OzrenTkalcecKrznaric

回答

0
select t1.pid, t2.DeptName 
from table1 t1 
join table2 t2 on t1.deptid like concat('%', t2.deptid, '%') 

儘管應該指出,將多個值存儲在單個列中並不是一種好習慣。如果您可以控制表格設計,則應更改它,以便每列只包含一個值。它造成了很多問題,加入另一個桌子的難度只是第一個問題。

+1

我真的相信你應該使用粗體字體,這是** SQL Server 2012 only ** – OzrenTkalcecKrznaric

+0

好點。對於Sql Server 2005我相信你可以做'%'+ CONVERT(varchar,t2.deptid)+'%' –

+0

對不起,它不能這樣工作 – OzrenTkalcecKrznaric

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