将另一个表中的所有匹配值放入单个列的查询

奥斯汀

我需要一个查询,将另一个表中的所有匹配值放入单个列中。

我有三个表来跟踪人们的日程安排。一个人表一个 Sessions 表和一个时间表的外部参照表。

Person Table
---------------------
PersonID    FirstName
---------   ---------
167196      Mark

SessionLive Table
-------------------------
SessionCode SessionAtLocationID
----------- -------------------
T4182       8105
T4183       8106
T4190       8113
T4179       8102

XPersonSchedule Table of the Persons schedule
-------------------------------------------------
PersonID    SessionAtLocationID
----------- -------------------
167196      8105
167196      8106
167196      8113
167196      8102

本次选择:

select Person.RecordNumber as PersonID, Person.FirstName
    , SessionLive.SessionCode
from Person 
join XPersonSchedule on XPersonSchedule.PersonID = RecordNumber
join SessionLive on 
    SessionLive.SessionAtLocationID = XPersonSchedule.SessionAtLocationId
where recordnumber = 167196

给我这个:

PersonID    FirstName   SessionCode
----------- ----------- ----------
167196      Mark        T4182
167196      Mark        T4183
167196      Mark        T4190
167196      Mark        T4179

我需要一个选择来代替我。每个人的一行,他们的会话在一列 cr/lf 中分开。

PersonID    FirstName    SessionCode
----------- ----------- -----------
167196      Mark         T4182<crlf>T4183<crlf>T4190<crlf>T4179

请!谢谢!

亚伦伯特兰

在旧的生命支持版本的 SQL Server 中,这是一个非常丑陋的解决方案:

SELECT PersonID = p.RecordNumber, p.FirstName, 
  SessionCodes = STUFF((
    SELECT CONCAT(char(13),char(10),sl.SessionCode)
      FROM dbo.SessionLive AS sl
      INNER JOIN dbo.XPersonSchedule AS xps
        ON sl.SessionAtLocationID = xps.SessionAtLocationID
      WHERE xps.PersonID = p.RecordNumber
      FOR XML PATH(''), TYPE
    ).value(N'./text()[1]', N'varchar(max)'), 1, 2, '')
FROM dbo.Person AS p
GROUP BY p.RecordNumber, p.FirstName;

输出:

个人ID 会话代码
167196 标记 T4182
T4183
T4190
T4179

这在较新的版本中稍微简单一些(有关背景,请参阅SQL Server 中的 String Aggregation Over the Years):

SELECT PersonID = p.RecordNumber, p.FirstName,
  SessionCodes = STRING_AGG(sl.SessionCode, char(13)+char(10))
FROM dbo.SessionLive AS sl
INNER JOIN dbo.XPersonSchedule AS xps
  ON sl.SessionAtLocationID = xps.SessionAtLocationID
INNER JOIN dbo.Person AS p
  ON xps.PersonID = p.RecordNumber
GROUP BY p.RecordNumber, p.FirstName;

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何从与另一个表中的所有值匹配的表中获取记录

将具有标准值的另一个表的列中的所有记录插入到表中

在另一个查询中使用一列中的所有值

在我的SQL查询中,如何有一个包含从另一个表查询的值的列?

删除列中的值与另一个数据集中的列中的值不匹配的所有行

如果第一列与另一个工作表上的值匹配,如何返回一行中的所有单元格

JOIN 查询以检索引用另一个表中单个列的多列

如何用另一个表中的匹配值替换/更新列中每个字符串的所有实例?

查询表中具有一个值但没有另一个值的所有唯一组合

仅当一列的所有元素都在另一个表中时才匹配

从另一个表中提取基于列的列的值,没有匹配的列

在另一个工作表中列出表中的所有唯一值

SQL 用另一个表的列中的值替换视图列中的所有行值

根据与另一个SQL Server表的匹配更新列中的所有条目

选择一个表中的所有列表与另一个表中的某些列表匹配的位置

如何将一列连接到另一个表中的所有列

MYSQL查询将列名匹配到另一个表中的行

匹配另一个表中的值

如何从矩阵中删除与另一个向量中的值匹配的所有行?

用另一个表中随机选择的值替换单个列

如何通过查询另一个表中的数据选择一个表中的所有行

从一个表中选择所有记录并从另一个表中匹配记录

从一个SQL表中搜索文本并与另一个SQL表中的文本匹配,然后将值返回到新列

查找另一个工作表匹配键中的所有行

SQL:选择与另一个表中的内容匹配的所有行

将 csv 表的所有列与从另一个表中提取的常量相乘

查询以基于另一个表的值获取列值,即一个表值在另一个表中具有字段名称

SQL 查询从另一个表中选择 1 个表和 1 个列(与表 1 中的名称相同)中的所有内容

从表中选择所有行,除了具有相同 id 的另一个表中的行在另一列中具有特定值