2017-06-21 28 views
0

各travel_modeの予約の月合計を示すピボットテーブルビューを作成したいとします。pgadminの2つのテーブルを結合してピボットテーブルビューを作成したい

表1の予約 - PROVIDER_ID、travel_mode

ピボットテーブル機能とクロス集計関数は、この演習を行うために使用してはならない - タイムスタンプ、予約は、 表2プロバイダをPROVIDER_ID。私はジョインまたは他の機能を使用したい。私は私が実行しようとしていますこのクエリの問題を理解していない

、それは私があなたのクエリを分析した場合、私はこれはあなたが何であるかと思い

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については考えられません)。サンプルデータと期待される出力を提供できれば、誰かが助けることができると確信しています。 BTWのmysqlとPostgresqlは異なっていますが、あなたが解決したいSQL方言にのみタグを付けるべきです。 –

+0

タグを編集しました:) テーブルxを宣言して結合に使用できるようにするにはどうすればよいですか? –

答えて

0

を「関係xは存在しません」と表示しますやろうとしている。

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

@VivekAmarnaniがない場合は、2017年5月の列車予約額を見たいと思わない限り、それらは「LEFT JOIN」と思うその月のバス予約。また、彼はおそらく 'travel_mode = 'train''をこれらの結合で使用したかったのです。なぜなら、量は前に' sum() 'のようにいくつかの数値である可能性が高いからです。しかし、私は関係xが存在しないという質問があったと思います。 –

関連する問題