2017-06-21 78 views
0

我想创建一个数据透视表视图,显示每个travel_mode的预订月份总月份。我想通过在pgadmin中加入两个表来创建数据透视表视图

表1预订 - 时间戳,预订,PROVIDER_ID 表2提供者 - PROVIDER_ID,TRAVEL_MODE

透视表功能和交叉功能不被用来做此工作。我想要使​​用连接或其他功能。

我不明白这个查询我试图运行的问题,它显示“关系X不存在”

SELECT c.month, train.amount, bus.amount, air.amount 
FROM (SELECT x.month 
     FROM (SELECT to_char(date_,'month') as month, travel_mode, sum(bookings) as amount 
    from bookings as b 
    join providers as p 
    on b.provider_id=p.provider_id 
    group by month, travel_mode) x 
     group by x.month 
    ) c 
JOIN x train ON c.month = train.month AND train.amount = 'train' 
JOIN x bus ON c.month = bus.month AND bus.amount = 'bus' 
JOIN x air ON c.month = air.month AND air.amount = 'air' 
; 
+0

这是否应该标记postgresql? –

+0

大概没有表x,你不能加入到在查询中创建的子查询中(在mysql中,对于postgresql没有任何想法)。如果你能提供样本数据和预期的输出,我相信有人能够提供帮助。顺便说一句mysql和Postgresql是不同的,你应该只标记你想要的解决方案的SQL方言。 –

+0

编辑标签:) 如何声明表x以便我可以将它用于连接? –

回答

0

如果我仔细分析查询我认为这是你是什么努力做到:

with x as (
    SELECT to_char(date_,'month') as month, travel_mode, sum(bookings) as amount 
    from bookings as b 
    join providers as p on b.provider_id=p.provider_id 
    group by month, travel_mode) x 
) 
SELECT c.month, train.amount, bus.amount, air.amount 
FROM (
    SELECT x.month 
    FROM x 
    group by x.month 
) c 
    JOIN x train ON c.month = train.month AND train.amount = 'train' 
    JOIN x bus ON c.month = bus.month AND bus.amount = 'bus' 
    JOIN x air ON c.month = air.month AND air.amount = 'air' 

如果你想加入到查询(派生表)的结果多次,你必须将它放入一个common table expression

select month from x group by month部分对我没有任何意义。

+0

我想按照这里给出的查询︰https://stackoverflow.com/questions/7563796/how-to-do-pivoting-in-postgresql/18351884 唯一的区别是,我必须创建表x我可以按照上述查询使用。 –

+0

@VivekAmarnani你不需要创建表x - CTE会做得很好 –

+0

我认为那些应该是'LEFT JOIN',除非@VivekAmarnani不希望看到2017年5月的火车票预订量,如果没有那个月的巴士预订。此外,他可能想在这些连接中使用'travel_mode ='train'',因为量最有可能是某个数值,因为它之前是sum()。但我想问题是关于关系x不存在。 –

相关问题