1

可能重复:
将多行连接成一个文本字符串?

我有一个SkillSets用一个SkillID字段和一个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 循环的情况下完成它。你能帮我吗?

4

3 回答 3

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  
于 2012-12-17T21:47:33.873 回答
0

在 MySQL 中,这将起作用:

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

但是GROUP_CONCAT是 MySQL 特定的,所以如果您使用不同的数据库,那将无法运行。

于 2012-12-17T21:39:49.733 回答
0

询问:

SQLFIDDLE示例

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 |
于 2012-12-17T22:00:24.293 回答