簡體   English   中英

從單列中選擇多行到單行

[英]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

請參閱SQL Fiddle with Demo

結果:

| 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM