SQLITE:如果共享一列,则将行合并为单行

Sal*_*rtz 5 sql database sqlite aggregate-functions

从上一篇文章中,我在sqlite3中有以下视图:

CREATE View AttendeeTableView AS

SELECT  (LastName || " " || FirstName) as AttendeeName,  
        CompanyName, 
        PhotoURI,
        CompanyAttendeeRelation.CompanyId,
        CompanyAttendeeRelation.AttendeeId 

FROM    Attendee 
JOIN    CompanyAttendeeRelation on CompanyAttendeeRelation.AttendeeId = Attendee.AttendeeId 

ORDER BY LastName;
Run Code Online (Sandbox Code Playgroud)

现在,由于数据是从Attendee和之间的多对多关系生成的Company,我可以得到如下结果:

Doe John | company A | johnPic.png | 1 | 15
Doe John | company B | johnPic.png | 2 | 15
Run Code Online (Sandbox Code Playgroud)

我想做的是,在有多个公司(如上所述)的情况下,创建一个输出的查询:

Doe John | company A company B | johnPic.png | 1 2 | 15
Run Code Online (Sandbox Code Playgroud)

另一个输出:

Doe John | company A | company B | johnPic.png | 1 | 2 | 15
Run Code Online (Sandbox Code Playgroud)

所以我需要知道如何为该表中具有不同值的行合并特定列.

有任何想法吗?

以防万一,company A company B在第一个查询显然是文本连接,也就是说,有些东西沿袭(row1.CompanyName || " " || row2.CompanyName)

Erw*_*ter 11

现在我明白了你的意思.使用聚合函数group_concat(X).
更多内容在手册中.

SELECT (a.LastName || " " || a.FirstName) AS AttendeeName
     , a.PhotoURI
     , group_concat(c.CompanyName) AS Companies
     , group_concat(c.CompanyId)   AS CompanyIds
FROM   Attendee AS a
JOIN   CompanyAttendeeRelation AS ca ON ca.AttendeeId = a.AttendeeId
JOIN   Company                 AS c  ON c.CompanyId = ca.CompanyId
GROUP  BY a.LastName, a.Firstname, a.PhotoURI;
Run Code Online (Sandbox Code Playgroud)

还使用表别名使其更短更容易阅读.