提取加入表作为Postgres中的列的结果

发布于 2025-02-04 01:30:47 字数 1541 浏览 1 评论 0原文

我试图找出一种生成SQL查询的方法,即在视图中使用,以生成像亲子关系的Excel一样。

以下桌子的

ID
名称电子邮件接受1
a--2b
名称-32
C--访客ID1
我有接受ID_Person(forefer_key-->
1aguest1---person.ID
Bguest1---2
3BGUEST2---2
4CGUEST1---3
5CGUEST2---3
6CGUEST3---3

一个人可以有多个客人陪同他/她。

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

person NameGuest 1Guest 2Guest 3名称
Aaguest1-b查询
bguest1bguest2-ccguest1
cguest1cguest3cguest2我可以产生两个单独的查询,

这些查询将会产生两个独立的 生成包含该信息的行列表,但我正在努力根据自己的信息来生成多列。

我已经研究了crosstab()寻找Postgres,但是到目前为止,我没有运气来产生任何想要的东西。

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

I trying to figure out a way to generate a SQL query, to be used in a view, to generate an Excel like format for parent-child relationship.

I have the following tables

Person
idnameemailaccepted
1A----
2B----
3C----
Guest
idnameacceptedid_person (foreign_key -> person.id)
1AGuest1---1
2BGuest1---2
3BGuest2---2
4CGuest1---3
5CGuest2---3
6CGuest3---3

A person can have multiple guests accompanying him/her.

What I want to do is generate a SQL that gives me the following result:

Person NameGuest 1 NameGuest 2 NameGuest 3 Name
AAGuest1----
BBGuest1BGuest2--
CCGuest1CGuest2CGuest3

I can generate two separate queries that will generate a list of rows with that information but I am struggling to generate multiple columns based on the information that I have.

I have looked into crosstab() for postgres, but so far I have no luck with generating anything that would like this.

Any help or pointers in the right direction would be helpful, thank you!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

挽梦忆笙歌 2025-02-11 01:30:47

您可以使用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位来宾。如果每人有更多客人,您需要扩展此信息。

I created a working example here: db<>fiddle

You can use 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));

Please note: This will work for 1 to 3 guest like you described. In case more guests per person are possible, you need to extend this.

I created a working example here: db<>fiddle

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文