我想编写一个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
Run Code Online (Sandbox Code Playgroud)
如您所见,SkillLink表的目的是将各种(可能是多个或没有)技能与个人匹配.我想用我的查询实现的结果是:
Name Skills
---- ------
Bill Telepathy,Karate
Bob
Jim Carpentry
Run Code Online (Sandbox Code Playgroud)
因此,对于每个人,我想要一个逗号加入的列表,其中包含指向他的所有SkillNames.这可能是多项技能或根本没有技能.
这显然不是我工作的实际数据,但结构是一样的.
也请随意为这个问题建议一个更好的标题作为评论,因为简洁地说它是我的问题的一部分.
Tar*_*ryn 13
你会用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
Run Code Online (Sandbox Code Playgroud)
结果:
| NAME | SKILLS |
----------------------------
| Bill | Telepathy, Karate |
| Bob | (null) |
| Jim | Carpentry |
Run Code Online (Sandbox Code Playgroud)
您正在寻找的是类似于 SQL Server 的 FOR XML PATH('') 的东西,它将结果组合为一个行集
Select Person.Name,
(
Select SkillName + ','
From SkillLink
inner join skill on skill.id = skilllink.skillid
Where SkillLink.PersonID = Person.ID FOR XML PATH('')
)
as Skills
FROM Person
Run Code Online (Sandbox Code Playgroud)