2012-12-17 38 views
1

可能重複:
Concatenate many rows into a single text string?SQL列編組

我有一個表稱爲SkillSetsSkillID場和SkillSetID場。讓我們說我在這個表中的記錄,如:

SkillID SkillSetID 
------- ---------- 
750  2 
750  4 
750  5 
751  3 
751  4 
751  6 

我需要產生以下的查詢:

SkillID SkillSetIDs 
------- ---------- 
750  2,4,5 
751  3,4,6 

在我看來,我記得看到這個使用某種XML子句,但無法找到關於它的任何事情,只是不知道如何在不使用遊標或while循環的情況下完成。你能幫我嗎?

+1

你需要做一個字符串連接聚合操作。這是高度數據庫特定的。你在使用哪種引擎? –

+0

如果你使用TSQL:http://sqloverflow.com/questions/451415/simulating-group-concat-mysql-function-in-microsoft-sql-server-2005 – Bort

+0

Sql Server 2008 R2。那麼,使用某種XML子句,沒有任何東西可以響起來?謝謝回覆。 –

回答

0

在MySQL中,這會工作:

SELECT SkillID, GROUP_CONCAT(SkillSetID) As SkillSetIDs 
FROM skills 
GROUP BY SkillID 

GROUP_CONCAT是MySQL的具體,因此,如果您使用的是不同的數據庫,不會飛。

0

這能幫助你嗎?

select 'test' as Test, 1 as Item 
into #test 
union select 'test2', 2 
union select 'test', 3 
union select NUll, 4 
union select 'test', 5 

select t2.test, STUFF((SELECT ', ' + cast(t1.Item as varchar (10)) 
     FROM #test t1 where t2.test = t1.test 
     FOR XML PATH('')), 1, 1, '') 
    from #test t2 
    group by t2.test 
0

查詢:

SQLFIDDLEExample

SELECT 
s.SkillID, 
STUFF((
     SELECT ',' + SkillSetID 
     FROM SkillSets s2 
     WHERE s2.SkillID = s.SkillID 
     FOR XML PATH('') 
    ), 1, 1, '') AS SkillSetIDs 
FROM SkillSets s 
GROUP BY s.SkillID 

結果:

| SKILLID | SKILLSETIDS | 
------------------------- 
|  750 |  2,4,5 | 
|  751 |  3,4,6 |