我想编写一个SQL Server查询,该查询将从以下示例表中检索数据:
Table: Person ID Name -- ---- 1 Bill 2 Bob 3 Jim Table: Skill ID SkillName -- ----- 1 Carpentry 2 Telepathy 3 Navigation 4 Opera 5 Karate Table: SkillLink ID PersonID SkillID -- -------- ------- 1 1 2 2 3 1 3 1 5
如您所见,SkillLink表的目的是将各种(可能是多个或没有)技能与单个人员匹配。我想通过查询实现的结果是:
Name Skills ---- ------ Bill Telepathy,Karate Bob Jim Carpentry
因此,对于每个人,我都希望使用逗号连接的所有指向他的SkillName列表。这可能是多种技能,或者根本没有。
这显然不是我正在使用的实际数据,但是结构是相同的。
也请随时为这个问题建议一个更好的标题作为注释,因为简洁地措辞是我的问题的一部分。
您将为此使用FOR XML PATH:
FOR XML PATH
select p.name, Stuff((SELECT ', ' + s.skillName FROM skilllink l left join skill s on l.skillid = s.id where p.id = l.personid FOR XML PATH('')),1,1,'') Skills from person p
参见带有演示的SQL Fiddle
结果:
| NAME | SKILLS | ---------------------------- | Bill | Telepathy, Karate | | Bob | (null) | | Jim | Carpentry |