当前位置: 首页 > 面试题库 >

从单列选择多行到单行

祁刚毅
2023-03-14
问题内容

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

参见带有演示的SQL Fiddle

结果:

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


 类似资料:
  • 问题内容: 我在数据库中有一个表,该表有9列包含相同种类的数据,这些值 允许为null 。我需要将每个非null值选择到单列的值中,这些值不关心它们源自的行的身份。 因此,对于一个看起来像这样的表: 我希望将每个以x开头的值选择到一列中。我得到的数据应如下表所示。需要保留顺序,因此第一行的第一列值应该在顶部,而最后一行的最后列值应该在底部: 我正在使用 SQL Server 2008 R2 。是否

  • 问题内容: 我正在通过具有只读访问权限的pgAdmin 4使用Postgres 9.5,我正在尝试编写一个select查询,该查询将从这种形式转换数据: 填写此表格: 请注意,列过滤器,组和角色中的值可能会更改。 可以执行该操作的postgres选择脚本吗? 非常感激! 问题答案: 试试这个 演示版

  • 问题内容: 如何选择多列的平均值? 假设我有一些数据,例如: 我想得到像 我试过了 但这是行不通的。 有关查询的任何想法可以做到这一点? 问题答案: 尝试 或者

  • 本文向大家介绍MySQL LIMIT选择单行,包括了MySQL LIMIT选择单行的使用技巧和注意事项,需要的朋友参考一下 要在MySQL中选择一行,可以使用LIMIT。首先,让我们创建一个表。创建表的查询如下- 使用insert命令在表中插入一些记录。查询如下- 使用select语句显示表中的所有记录。查询如下- 以下是输出- 这是使用LIMIT从表中选择一行的查询- 以下是输出-

  • 我正在进行单选和多选测试。 我有几个问题,每个问题有4个答案。 当每个答案都被分配到单选按钮时,我正在随机排列答案。这就是我洗牌arraylist的方式,Random是一个带有项目的arraylist,r1、r2、r3、r4是单选按钮。 我能够以混乱的方式显示答案,但当我选择答案时,我需要显示答案是正确的还是错误的。 正确答案是B我需要显示正确答案是B。 如何做到这一点。 编辑:我已经尝试过了:

  • 问题内容: 我有一个表,值看起来像这样。 如何在mysql中将列区分为类似的内容? 问题答案: 这应该做 db <> fiddle中的演示 更新以添加编号: 在db <> fiddle中编号的演示