[英]SELECT multiple rows from single column into single row
我想編寫一個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,1,'') Skills
from person p
結果:
| NAME | SKILLS |
----------------------------
| Bill | Telepathy, Karate |
| Bob | (null) |
| Jim | Carpentry |
您正在尋找的是類似於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
您正在尋找的是類似於SQL Server的FOR XML PATH,它將結果組合為行集
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.