我想编写一个 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
:
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
结果:
| NAME | SKILLS |
----------------------------
| Bill | Telepathy, Karate |
| Bob | (null) |
| Jim | Carpentry |
关于sql - 从单列中选择多行到单行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13730484/