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)
还使用表别名使其更短更容易阅读.