我想编写一个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
因此,对于每个人,我想要一个逗号加入的列表,其中包含指向他的所有SkillNames.这可能是多项技能或根本没有技能.
这显然不是我工作的实际数据,但结构是一样的.
解决方法
您将使用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,'') Skills from person p
结果:
| NAME | SKILLS | ---------------------------- | Bill | Telepathy,Karate | | Bob | (null) | | Jim | Carpentry |