Sql列分组
可能重复:Sql列分组,sql,tsql,sql-server-2008-r2,Sql,Tsql,Sql Server 2008 R2,可能重复: 我有一个名为SkillSets的表,其中有一个SkillID字段和一个SkillSetID字段。假设我在该表中有如下记录: SkillID SkillSetID ------- ---------- 750 2 750 4 750 5 751 3 751 4 751 6 我需要一个生成以下内容的查询: SkillID SkillSetIDs ------- ---------- 750 2,4,5 75
我有一个名为
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循环的情况下完成它。您能帮忙吗?在MySQL中,这将起作用:
SELECT SkillID, GROUP_CONCAT(SkillSetID) As SkillSetIDs
FROM skills
GROUP BY SkillID
但是,
GROUP\u CONCAT
是特定于MySQL的,所以如果您使用的是不同的数据库,它就不会飞了。这对您有帮助吗
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
查询:
结果:
| SKILLID | SKILLSETIDS |
-------------------------
| 750 | 2,4,5 |
| 751 | 3,4,6 |
您需要执行字符串串联聚合操作。这是高度特定于数据库的。您使用的是哪个引擎?如果您使用的是TSQL:Sql Server 2008 R2。所以,使用某种XML子句没有什么值得注意的?谢谢你的回复。
| SKILLID | SKILLSETIDS |
-------------------------
| 750 | 2,4,5 |
| 751 | 3,4,6 |