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



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

我有三个表跟踪人们的日程安排。一个person表、一个Sessions表和一个日程安排的xref表。

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

我需要一个select来代替这个。

每个人一行,他们的会话在一列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;

输出:

SessionCodes

> T4182 T4183 T4190
T4179

相关内容

  • 没有找到相关文章

最新更新