获取连接表的结果作为 postgres 中的列

Fetch results of joined tables as columns in postgres

我试图找出一种方法来生成 SQL 查询,以在视图中使用,以生成类似 Excel 的父子关系格式。

我有以下表格

id name email accepted
1 A -- --
2 B -- --
3 C -- --
访客
id name accepted id_person (foreign_key -> person.id)
1 AGuest1 --- 1
2 BGuest1 --- 2
3 BGuest2 --- 2
4 CGuest1 --- 3
5 CGuest2 --- 3
6 CGuest3 --- 3

一个人可以有多个客人陪同him/her。

我想要做的是生成一个 SQL 并给出以下结果:

Person Name Guest 1 Name Guest 2 Name Guest 3 Name
A AGuest1 -- --
B BGuest1 BGuest2 --
C CGuest1 CGuest2 CGuest3

我可以生成两个单独的查询,这两个查询将生成包含该信息的行列表,但我很难根据我拥有的信息生成多个列。

我已经研究了 postgres 的 crosstab(),但到目前为止我还没有生成任何类似这样的东西。

任何正确方向的帮助或指示都会有所帮助,谢谢!

您可以使用 CROSSTAB:

SELECT *
FROM CROSSTAB (
    'SELECT p.name, g.name, g.name
    FROM person p JOIN guest g
    ON p.id = g.id_person
    ORDER BY 1,2')
    AS ("Person Name" varchar(100), "Guest 1 Name" varchar(100),
    "Guest 2 Name" varchar(100), "Guest 3 Name" varchar(100));

请注意:这适用于您描述的 1 到 3 位房客。如果每人可能有更多客人,则需要延长此时间。

我在这里创建了一个工作示例:db<>fiddle