Sql列分组

时间:2012-12-17 21:38:00

标签: sql tsql sql-server-2008-r2

  

可能重复:
  Concatenate many rows into a single text string?

我有一个名为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循环的情况下完成它。你能帮忙吗?

3 个答案:

答案 0 :(得分:0)

在MySQL中,这可行:

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

但是GROUP_CONCAT是特定于MySQL的,所以如果你使用的是另一个数据库,那就不会飞。

答案 1 :(得分: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  

答案 2 :(得分: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 |