お世話になっております。
よろしくお願いします。
やりたいこと
複数のテーブルからSELECTした結果を合わせて一つにまとめた表を出力するビューを作成したいです。
下記のような二つSQLで複数テーブルからデータを抽出した後、ID・year・monthを基準として一つの表にまとめたいと考えています。
SQL
1--SQL1:テーブル"TABLE0"からID・year・monthを基準にstatus=1のレコード数をカウントする 2SELECT tbl1.ID 3 ,tbl1.year 4 ,tbl1.month 5 ,sum(CASE tbl1.status WHEN 1 THEN 1 ELSE 0 END) AS count_status 6FROM ( 7 SELECT tbl0.ID 8 ,extract(YEAR FROM tbl0.ts) AS year 9 ,extract(MONTH FROM tbl0.ts) AS month 10 ,tbl0.status 11 FROM TABLE0 tbl0 12 ) AS tbl1 13WHERE tbl1.status = 1 14GROUP BY tbl1.ID,tbl1.year,tbl1.month 15ORDER BY tbl1.ID,tbl1.year,tbl1.month;
SQL
1--テーブル"TABLE_A"からID・year・monthを基準にNumber1=1,2,3のレコード数をカウント 2--テーブル"TABLE_B"からID・year・monthを基準にNumber2=12のレコード数をカウント 3--上記実現のために、それぞれの条件でUNION後にカウント 4SELECT tblA.ID 5 ,tblA.year 6 ,tblA.month 7 ,sum(CASE tblA.number WHEN 1 THEN 1 ELSE 0 END) AS count_1 8 ,sum(CASE tblA.number WHEN 2 THEN 1 ELSE 0 END) AS count_2 9 ,sum(CASE tblA.number WHEN 3 THEN 1 ELSE 0 END) AS count_3 10 ,sum(CASE tblA.number WHEN 12 THEN 1 ELSE 0 END) AS count_12 11FROM ( 12 SELECT tbla.ID 13 ,extract(YEAR FROM tbla.timestamp) AS year 14 ,extract(MONTH FROM tbla.timestamp) AS month 15 ,tbla.Number1 AS number 16 FROM TABLE_A tbla 17 WHERE tbla.Number1 in (1,2,3) 18 UNION ALL 19 SELECT tblb.ID 20 ,extract(YEAR FROM tblb.timestamp) AS year 21 ,extract(MONTH FROM tblb.timestamp) AS month 22 ,tblb.Number2 23 FROM TABLE_B tblb 24 WHERE tblb.Number2 = 12 25 ) AS tblA 26GROUP BY tblA.ID,tblA.year,tblA.month 27ORDER BY tblA.ID,tblA.year,tblA.month; 28
試そうとしたこと
"LEFT JOIN"で一つ目のSQL結果に二つ目のSQL結果を結合しようと考えましたが、LEFT JOIN ON ○○ = ●●
を書く段階で、どうやって記載すればいいかわからなくなってしまいました。
(二つ目のSQLですでに複数テーブルをUNIONしてtblAとエイリアスをつけているため)
先週質問させていただいた内容の質問からあまり時間がたっておらず、非常に力不足を実感いたします。。
ご参考となる一言でも構いませんので、ご助力いただけますと幸いです。

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/02/25 08:10