获取连接表的结果作为 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
我试图找出一种方法来生成 SQL 查询,以在视图中使用,以生成类似 Excel 的父子关系格式。
我有以下表格
人
id | name | 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