复杂的 Postgres 查询问题

Complex Postgres Query Issues

工作中正在为参与酒店计划构建查询。我有一个 table dwp_list,另一列是酒店代码 (fk) 和程序名称,还有一个 table all_hotels,它列出了所有使用酒店代码作为主键的酒店信息.我正在尝试做的(没有成功)是为每个程序名称添加列以创建总参与报告。请查看图片以获得更好的描述。我试过使用 EXISTS 函数,但子查询返回了不止一条记录。

总共有 18 个不同的程序,所以我知道如何做一个,我可以很容易地管理其余的,但是手动做起来很痛苦。

对于固定的程序名列表,可以做条件聚合:

select h.*,
    max(case when l.programname = 'AAA' then 'x' end) as aaa,
    max(case when l.programname = 'BBB' then 'x' end) as bbb,
    max(case when l.programname = 'CCC' then 'x' end) as ccc
from all_hotels h
inner join dwp_list l on l.hotelcode = h.hotelcode
group by h.hotelcode