繁体   English   中英

如何在 SQL 的单列中显示多列?

[英]How to show multiple columns in a single column in SQL?

我有一个表参加者,当加入表参加者与表 Session 时,参加者可以参加许多会议。 因此,当显示与会者以及他们参加了哪些会议时,我会得到多行相同的与会者,例如:

John Doe-BMW Conference
John Doe-Blockchain conference
Jane Doe-blabla
John Doe- Mercedess

sql 有没有办法显示

John Doe-宝马会议,梅赛德斯,区块链?

SELECT Distinct
  attendee.Id, attendee.Firstname, attendee.PhoneNumber,
  attendee.Email,attendee.Town, attendee.BloodType, session.Id ,
  session.LocationId , session.Name as SessionName , location.Id ,
  location.Name as Location_Name , sessionattended.SessionAttendedId,
  sessionattended.SessionId, sessionattended.AttendeeId,
  attendee.Lastname
FROM `session`, `attendee`, `sessionattended`, `location`
WHERE attendee.Id = sessionattended.AttendeeId 
  and session.Id = sessionattended.SessionId 
  and session.LocationId = location.Id;

使用 GROUP_CONCAT MySQL (很久以来可用)

或 STRING_AGG MSSQL (在 2017 及更高版本中可用)

有关两者的比较,请参阅: https://database.guide/mysql-group_concat-vs-t-sql-string_agg/

谷歌将在其他 DBMS 中找到有关如何执行此操作的信息,甚至可以找到如何以“旧方式”执行此操作的信息,例如: GROUP BY to combine/concat a column

尝试这个。 基本上这个想法是使用 FOR XML PATH 来获得这种类型的结果。

SELECT Distinct
       a.Id, a.Firstname, a.PhoneNumber, a.Email,a.Town, a.BloodType, 
       all_conferences = STUFF((SELECT ',' + CAST(s1.Name as Varchar) 
                                FROM sessionattended sa1  
                                JOIN Session s1 ON sa1.SessionId = s1.Id
                                WHERE sa1.AttendeeId = sa.AttendeeId FOR XML PATH('') ), 1, 1, '')

FROM `session` s
JOIN `sessionattended` sa ON sa.SessionId = s.Id
JOIN `attendee` a ON a.Id = sa.AttendeeId 
JOIN `location` l ON s.LocationId = l.Id

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM