• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:UNION ALLでつなげた複数ビューの集計)

UNION ALLでつなげた複数ビューの集計

このQ&Aのポイント
  • UNION ALLを使用して複数のビューを結合し、集計する方法について相談しています。ビューを結合した結果、同じデータが複数回表示されるため、テストが困難です。さらに、ビューをさらに集計する方法にもついて相談しています。現在の解決策は、ビューを作成して集計する方法ですが、できればプロシージャやビューを使用せずにSQLのみで解決したいと考えています。
  • UNION ALLを使用して複数のビューを結合し、集計する方法について相談しています。テスト用のSQLのため、プロシージャやビューを作成したくありません。しかし、ビューを結合した結果重複が生じてしまい、テストが困難です。さらに、結合した結果をさらに集計する方法についても相談しています。解決策としては、ビューを作成して集計する方法が思いつきますが、他にも解決策はあるのでしょうか。
  • UNION ALLを使用して複数のビューを結合し、集計する方法について質問しています。ビューを結合した結果、同じデータが複数回表示され、テストが困難になっています。さらに、ビューをさらに集計する方法についても教えてほしいです。できるだけシンプルにSQLのみで解決したいと考えています。解決策が他にある場合は、教えていただけると助かります。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1
s_bezita12
質問者

補足

早々と回答ありがとうございます。 グループ関数は2回までしか使っていません。 あくまで、ビューAの集計結果とビューBの集計結果で集計がやりたいだけですので、 2回です。

その他の回答 (2)

  • entree
  • ベストアンサー率55% (405/735)
回答No.3

これじゃダメですか? SELECT  TO_CHAR(V_SYORI_YM, 'YYYYMM') AS "年月" ,  SUM(V_A_CHAG),  SUM(V_B_CHAG),  SUM(V_C_CHAG),  SUM(V_ALL_CHAG) FROM  (  SELECT   V_SYORI_YM,   V_A_CHAG,   V_B_CHAG,   V_C_CHAG,   V_ALL_CHAG  FROM   V_001  WHERE   V_CRT_DTS >= TO_DATE('20110401', 'YYYYMMDD') AND   V_CRT_DTS < TO_DATE('20120401', 'YYYYMMDD')  UNION ALL  SELECT   V_SYORI_YM,   V_A_CHAG,   V_B_CHAG,   V_C_CHAG,   V_ALL_CHAG  FROM   V_002I  WHERE   V_SYORI_YM >= TO_DATE('20110401', 'YYYYMMDD') AND   V_SYORI_YM < TO_DATE('20120401', 'YYYYMMDD')  ) GROUP BY   TO_CHAR(V_SYORI_YM, 'YYYYMM');

  • nora1962
  • ベストアンサー率60% (431/717)
回答No.2

> ビュー1の集計結果 > UNION ALL > ビュー2の集計結果 > UNION ALL > ビュー3の集計結果 のビューのSQLの概略と > SELECT > FROM( > ビュー1の集計結果 > UNION ALL > ビュー2の集計結果 > UNION ALL > ビュー3の集計結果 > ) > GROUP BY の実際の記述全体を提示できますか?

s_bezita12
質問者

補足

全体の記述は下記のとおりです。 そのまま転載するわけにはいかないので、ビュー名、項目名等は変更してあります。 SELECT "処理年月" AS "年月" ,SUM("調定額_A") ,SUM("調定額_B)" ,SUM("調定額_C)" ,SUM("調定額_合計)" FROM ( SELECT SUBSTR(TO_CHAR(V_SYORI_YM,'YYYYMMDD'),1,6) AS "処理年月" , SUM(V_A_CHAG) AS "調定額_A" , SUM(V_B_CHAG) AS "調定額_B" , SUM(V_C_CHAG) AS "調定額_C" , SUM(V_ALL_CHAG) AS "調定額_合計"  FROM V_001 WHERE TO_DATE(TO_CHAR(V_CRT_DTS,'YYYYMMDD'),'YYYYMMDD') >= TO_DATE('20110401','YYYYMMDD') AND TO_DATE(TO_CHAR(V_CRT_DTS,'YYYYMMDD'),'YYYYMMDD') < TO_DATE('20120401','YYYYMMDD')  GROUP BY SUBSTR(TO_CHAR(V_SYORI_YM,'YYYYMMDD'),1,6) UNION ALL SELECT SUBSTR(TO_CHAR(V_SYORI_YM,'YYYYMMDD'),1,6) AS "処理年月" , SUM(V_A_CHAG) AS "調定額_A" , SUM(V_B_CHAG) AS "調定額_B" , SUM(V_C_CHAG) AS "調定額_C" , SUM(V_ALL_CHAG) AS "調定額_合計"  FROM V_002I WHERE V_SYORI_YM >= TO_DATE('20110401','YYYYMMDD') AND V_SYORI_YM < TO_DATE('20120401','YYYYMMDD')    GROUP BY SUBSTR(TO_CHAR(V_SYORI_YM,'YYYYMMDD'),1,6) ) GROUP BY "処理年月" AS "年月" FROM()の中身がビューの集計結果をUNIONALLでつないだものです。 内容はGROUPBY句で年月を指定して、SUMで集計してるだけのシンプルなものです。 今回は、これを更にもう1度集計し、同じ年月が複数回出てくるのを阻止しようとしています。 そのため、集計は2回行ってますが、2回ではoracleのエラーにはひっかからないはずなのですが、 そこがよくわかりません。

関連するQ&A