微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

sql – 从单列中选择多行到单行

我想编写一个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

SQL Fiddle with Demo

结果:

| NAME |            SKILLS |
----------------------------
| Bill | Telepathy,Karate |
|  Bob |            (null) |
|  Jim |         Carpentry |

原文地址:https://www.jb51.cc/mssql/84048.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐